标签: android-gradle-plugin-8.0

在 Android Gradle 插件版本 8.0 中,资源 ID 默认情况下是非最终的,请避免在 switch case 语句中使用它们

我在 Android Studio 中收到有关导航抽屉资源的警告。警告是:

在 Android Gradle 插件版本 8.0 中,资源 ID 默认情况下是非最终的,请避免在 switch case 语句中使用它们。

我尝试使用该方法if来更新我的代码,但我不会“正确转换”。我在互联网上找到这篇文章来帮助我转换代码,但它似乎对我不起作用。我想知道我是否错过了什么。

下面是提出想法之前和之后,是我的完整活动,因为我看到很多人在使用后有这个public void onClick...,但我不使用它。我有navigationView.setNavigationItemSelectedListener(menuItem -> {

navigationView.setNavigationItemSelectedListener(menuItem -> {
switch (menuItem.getItemId())
            {
                case R.id.nav_drawer_settings:
                    Intent intent = new Intent (MainActivity.this, SettingsActivity.class);
                    startActivity(intent);
                    break;
                case R.id.nav_drawer_whitelist:
                    intent = new Intent (MainActivity.this, WhitelistActivity.class);
                    startActivity(intent);
                    break;
                case R.id.nav_drawer_clipboard_cleaner:
                    intent = new Intent (MainActivity.this, ClipboardActivity.class);
                    startActivity(intent);
                    break;
                case R.id.nav_drawer_invalid_media_cleaner:
                    intent = new Intent (MainActivity.this, InvalidActivity.class);
                    startActivity(intent);
                    break;
                case …
Run Code Online (Sandbox Code Playgroud)

java android navigation-drawer android-gradle-plugin-8.0

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

proguard 规则“-dontwarn”不起作用(AGP 8.0)

更新到 Android Gradle Plugin 8.0 后,我在 minifyReleaseAndroidTestWithR8 步骤中收到以下构建时错误:

运行 R8 时检测到缺少类。请添加缺少的类或应用在 C:\Users\...\app\build\outputs\mapping\releaseAndroidTest\missing_rules.txt 中生成的其他保留规则。

缺少 io.reactivex.Flowable 类(引用自:io.reactivex.Flowable io.realm.BaseRealm.asFlowable() 和 5 个其他上下文)

缺少类 io.reactivex.Observable (引用自:io.reactivex.Observable io.realm.RealmList.asChangesetObservable() 和其他 3 个上下文)

缺少类 java.lang.ClassValue (引用自:java.lang.ClassValue com.google.common.util.concurrent.FuturesGetChecked$GetCheckedTypeValidatorHolder$ClassValueValidator.isValidClass 和 3 个其他上下文)

据我了解,在 AGP 8.0 之前,缺少的类被视为警告,而现在它们被视为错误。所以我将文件中的规则添加missing_rules.txt到我的proguard-rules.pro

-dontwarn io.reactivex.Flowable
-dontwarn io.reactivex.Observable
-dontwarn java.lang.ClassValue
Run Code Online (Sandbox Code Playgroud)

不过,新增加的-dontwarn规则似乎并没有什么作用。我在后续构建中遇到相同的“缺少类”错误。我尝试过清理项目后构建、重新启动 Android Studio 后构建以及使 Android Studio 缓存无效后构建。一切都无济于事。

我还尝试在每个规则中添加“.**”。我仍然遇到相同的“缺少课程”错误。

我的proguard-rules文件有另一个有效-dontwarn的规则:

-dontwarn sun.misc.Cleaner
Run Code Online (Sandbox Code Playgroud)

如果删除此规则,我会收到缺失类警告sun.misc.Cleaner(如预期),如果我重新设置该规则,错误就会消失。这似乎表明该问题不是-dontwarn规则的根本问题。

如果我禁用minifyEnabled,构建将完成且不会出现错误。

三个缺失的 ( io.reactivex) 类中的两个是从 Realm …

android proguard realm android-r8 android-gradle-plugin-8.0

4
推荐指数
1
解决办法
3465
查看次数

getParcelable() 由于 AGP 8 中的 ifTable 为空而崩溃

我最近更新到了 AGP 8,并在 Play 商店上发布了更新。我收到一些最近未更改的代码区域发生崩溃的报告。我相当有信心这是由 AGP 8 升级引起的崩溃,特别是在 R8 全模式周围。

崩溃周围的代码正在恢复布局管理器的状态。

恢复代码

if (savedInstanceState != null) {
    oldRecyclerLayoutState = savedInstanceState.getParcelableCompat(
        SIS_RECYCLER_LAYOUT_STATE,
    )
}
Run Code Online (Sandbox Code Playgroud)

保存实例代码

private lateinit var layoutManager: LinearLayoutManager
...
override fun onSaveInstanceState(outState: Bundle) {
    outState.putParcelable(SIS_RECYCLER_LAYOUT_STATE, layoutManager.onSaveInstanceState())
    super.onSaveInstanceState(outState)

}
Run Code Online (Sandbox Code Playgroud)

Class.isAssignableFrom()崩溃报告表明,读取 Parcelable 会崩溃,因为调用类时其 ifTable 为 null 。从AOSP中,我可以看到 anifTable是一个接口表。我假设isAssignableFrom正在使用 来ifTable确定可分配性,但是由于类为空,它无法读取它。不幸的是,该错误没有告诉我哪个类为空。

完整的堆栈跟踪:

Fatal Exception: java.lang.NullPointerException: Attempt to read from field 'java.lang.Object[] java.lang.Class.ifTable' on a null object reference in method 'boolean java.lang.Class.isAssignableFrom(java.lang.Class)'
       at java.lang.Class.isAssignableFrom(Class.java:579)
       at …
Run Code Online (Sandbox Code Playgroud)

android parcelable android-r8 android-gradle-plugin-8.0

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