小编Hon*_*ong的帖子

如何将 registerForActivityResult 与 androidx.fragment.app.Fragment 一起使用?

 ActivityResultLauncher<Intent> launcherImportFileSelection = requireActivity().registerForActivityResult(...
Run Code Online (Sandbox Code Playgroud)

如果上面的代码放在onCreate(Bundle savingInstanceState)中,会抛出以下异常:

Exception: LifecycleOwner MyActivity@868498a is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.
Run Code Online (Sandbox Code Playgroud)

如果将其放置在构造函数中或作为声明,则 requireActivity() 会抛出以下异常:

java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
2021-04-17 15:15:41.948 27930-27930/net.biyee.onvifer E/AndroidRuntime:     at androidx.fragment.app.Fragment.instantiate(Fragment.java:613)
            ... 42 more
     Caused by: java.lang.IllegalStateException: Fragment MyFragment{fba6d22} (e0d1f006-996d-4051-9839-4575a92e33dd) not attached to an activity.
        at androidx.fragment.app.Fragment.requireActivity(Fragment.java:928)
Run Code Online (Sandbox Code Playgroud)

我在 build.gradle 中有以下内容:

implementation 'androidx.fragment:fragment:1.3.2'
Run Code Online (Sandbox Code Playgroud)

有人可以提供这方面的建议吗?

更新:

问题已经解决了。请参阅我与@CommmonsWare 的交流

android androidx

10
推荐指数
1
解决办法
3万
查看次数

AGP 7.1.0 对 apk 进行了哪些更改?

我刚刚将 Android Studio 从 Arctic Fox 升级到 Bumblebee,并将 AGP 从 7.0.4 升级到 7.1.0 在此输入图像描述

该项目目前有: 在此输入图像描述

由gradle任务assembleOfficialRelease为flavor“official”生成的apk多年来一直位于以下目录中:

..app/build/outputs/apk/official/release/app-official-release.apk
Run Code Online (Sandbox Code Playgroud)

我认为新的 AGP 已将位置更改为:

..app/build/intermediates/apk/official/release/app-official-release.apk
Run Code Online (Sandbox Code Playgroud)

我试图找出 AGP 对 apk 还做了什么,但在发行说明中找不到任何内容。

不知道有没有有识之士能告诉我,在我向用户发布之前,新的 AGP 对这个 apk 做了什么改变。

更新(2022-05-09)

Android Studio Chipmunk 已将 apk 文件放回到文件夹 ..app/build/outputs/apk/official/release/ 中,没有任何通知。在我意识到这一点之前,它再次杀死了我很多时间。

android-studio android-gradle-plugin android-studio-bumblebee

10
推荐指数
1
解决办法
1685
查看次数

当新版本中的首选项结构发生变化时,Android用户首选项的现有数据会发生什么变化?

例如,如果添加或删除了一些首选项条目,那么当使用新的首选项结构更新应用程序时,Android如何处理现有的首选项数据?

我很抱歉这个基本问题,但我勤奋的搜索和阅读找不到答案.

android updates preferences

9
推荐指数
1
解决办法
665
查看次数

如何在加载时将光标更改为默认值

单击超链接时,我有以下代码来更改光标

        $('a').click(function () {
            $('*').css("cursor", "progress");
        });
Run Code Online (Sandbox Code Playgroud)

单击链接时,光标将完全按预期更改为"progress"(即等待光标).但是,问题是加载新页面后光标仍保持"进度".仅在鼠标移动后才会更改为默认值.这与另一个问题有关.其他人表达了同样的问题.

如标题所述,我希望在加载页面时将光标更改为默认值.

css jquery cursor

8
推荐指数
1
解决办法
1万
查看次数

如何在代码中引用Android库的strings.xml中的字符串?

要在应用程序项目的strings.xml(在res\values中)引用字符串foo,可以简单地使用

getString(R.string.foo)
Run Code Online (Sandbox Code Playgroud)

getString是Context的一种方法.

假设Android库的strings.xml中有一个字符串foo.如何在图书馆的方法中使用它?

编辑:有人建议将Context的引用传递给库方法,以便可以使用getString().由于它是应用程序项目的上下文,因此存在潜在的冲突,可以说明如下:

假设:库有一个字符串foo,其值为"library foo".一个app项目有一个字符串foo,其值为"app foo"

以下代码

Log.d("Debug", "App foo ID: " + R.string.foo);  
Log.d("Debug", "App: foo value: " + getString(R.string.foo));
Run Code Online (Sandbox Code Playgroud)

产生:

03-22 05:53:55.590: D/Debug(16719): App foo ID: 2131230723
03-22 05:53:55.590: D/Debug(16719): App foo value: app foo
Run Code Online (Sandbox Code Playgroud)

在库方法中,以下代码

Log.d("Debug", "Library foo ID: " + R.string.foo); 
Log.d("Debug", "Library foo value: " + context.getString(com.my.library.R.string.foo));
Run Code Online (Sandbox Code Playgroud)

产生:

03-22 05:55:03.680: D/Debug(16719): Library foo ID: 2131230723
03-22 05:55:03.680: D/Debug(16719): Library foo value: app foo
Run Code Online (Sandbox Code Playgroud)

以上显示ID冲突因此错误的字符串值.

android android-resources

8
推荐指数
2
解决办法
8182
查看次数

Proguard替代使用预编译的第三方库来混淆Android应用程序

我已经多次尝试过ProGuard,并且在过去一年左右的时间里花了很多时间配置它无济于事.它似乎有一些与预编译的第三方库相关的固有限制,如其文档中所述.ProGuard文档很好地提供了一长串备选方案.我不是一个一个地尝试它们,而是在这里看看是否有任何人可以与其中一些人分享成功经验.我只需要一些东西来混淆java代码.代码收缩和优化是很好的,但不是必需的.

java obfuscation android proguard

8
推荐指数
0
解决办法
5190
查看次数

Visual Studio Emulator for Android是否仍支持拖放包安装?

我之前通过拖放在Visual Studio Emulator for Android上安装了一个软件包.我昨天得到了一个新的更新.模拟器似乎不再支持拖放.谁能对此有所了解?

android android-emulator visual-studio-emulator

8
推荐指数
1
解决办法
2563
查看次数

Android 7.0中的android.webkit.WebViewFactory $ MissingWebViewPackageException

偶尔(很少)报告以下崩溃,并且仅从Android 7.0设备报告:

android.util.AndroidRuntimeException: 
  at android.webkit.WebViewFactory.getProviderClass (WebViewFactory.java:371)
  at android.webkit.WebViewFactory.getProvider (WebViewFactory.java:194)
  at android.webkit.WebViewDatabase.getInstance (WebViewDatabase.java:38)
  at com.amazon.device.ads.AdLayout.isWebViewDatabaseNull (SourceFile:352)
  at com.amazon.device.ads.AdLayout.initializeIfNecessary (SourceFile:260)
  at com.amazon.device.ads.AdLayout.getAdController (SourceFile:303)
  at com.amazon.device.ads.AdLayout.onLayout (SourceFile:478)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.RelativeLayout.onLayout (RelativeLayout.java:1189)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.RelativeLayout.onLayout (RelativeLayout.java:1189)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.LinearLayout.setChildFrame (LinearLayout.java:1982)
  at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1826)
  at android.widget.LinearLayout.onLayout (LinearLayout.java:1735)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:383)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:321)
  at android.view.View.layout (View.java:17838)
  at android.view.ViewGroup.layout (ViewGroup.java:5754)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:383) …
Run Code Online (Sandbox Code Playgroud)

crash android

8
推荐指数
1
解决办法
4339
查看次数

如何检测 Google 应用内结算的取消或退款订单?

我有很多帖子和 Google 文档,但我仍然不清楚如何判断应用内购买已退款。我小心红了In-App Billing v3 - 不检测退款Google Play In-App Billing Version 3 支持退款吗?.

我相信我在不久前通过复制和粘贴从 Google 官方文档中记下了以下笔记:

purchaseState:订单的购买状态。可能的值为 0(已购买)、1(已取消)或 2(已退款)。

现在,官方文档有以下内容:

-> purchaseState:订单的购买状态。它总是返回 0-

(购买)。

更具体地说,如果 IAB 购买被退款或取消,那是否仍在 mHelper.queryInventoryAsync(mGotInventoryListener) 获取的用户库存中?如果是这样,如何判断购买已被取消或退款?

更新 [2019-12-12]:

我已经测试了很多次并确认了以下几点:

如果订单在退款后被取消,它将从getPurchasesList返回的结果中消失。发生这种情况所需的时间各不相同。可能是几分钟到 10 多个小时。我认为这取决于 Google Play 何时刷新其缓存。似乎可以打开 Google Play 来刷新其缓存。在一种情况下,getPurchasesList在退款 10 多个小时后仍然返回了已退款的购买,但在 Google Play 一打开它就停止了退货。

android google-checkout in-app-billing google-play

7
推荐指数
1
解决办法
2545
查看次数

“-keepattributes SourceFile,LineNumberTable”对于新的Android 代码压缩器R8 意味着什么?

自动生成的 proguard-rules.pro 具有以下内容:

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
Run Code Online (Sandbox Code Playgroud)

多年来,我一直对此进行评论,直到 Android Studio 3.4默认使用R8而不是 ProGuard ,它才能完美运行。

让我们使用以下示例:

 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
    at net.foo.anroid.Foo.wb.d(SourceFile:453)
    at net.foo.anroid.Foo.wb.a(SourceFile:213)
    at net.foo.anroid.Foo.wb.n(SourceFile:103)
    at net.foo.anroid.Foo.qa.run(Unknown Source:2)
    at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)

当使用 ProGuard 时,行号(例如 453、213...)曾经是 Java 代码源文件中的实际行号,但它们不再是 R8。即使使用官方推荐的反混淆工具ReTrace也无法恢复原始行号。

“-keepattributes SourceFile,LineNumberTable”究竟是做什么的?

android-studio android-proguard android-studio-3.4

7
推荐指数
1
解决办法
392
查看次数