将我的应用迁移到Android Studio 3.2上的AndroidX库。
在调试中运行时,一切正常,但是如果我生成一个签名的APK,并使用Proguard进行了混淆-我会收到此错误:

java.lang.VerifyError: Verifier rejected class d.a: androidx.preference.Preference d.a.a(androidx.fragment.app.k, int)
failed to verify: androidx.preference.Preference d.a.a(androidx.fragment.app.k, int): [0x8] ‘this’ argument ‘Reference:
androidx.fragment.app.k’ not instance of ‘Reference:
androidx.preference.B’ (declaration of ‘d.a’ appears in base.apk)

我试过排除所有AndroidX库:
-dontwarn androidx.**
-keep class androidx.** { *; }
-keep interface androidx.** { *; }

但是问题仍然存在,除非我基本上使用取消混淆
-keep class com.myapp.package.** { *; }

还尝试查看映射文件中的d.a类是什么,但并没有向我提示问题的方向。

启用Jetifier
android.useAndroidX=true
android.enableJetifier=true

我在这里想念什么吗?可能这是androix.preference库存在的问题吗?
  • 打开了Google issue tracker的错误。
  • 最佳答案

    解决。

    android.enableR8=false添加到您的project gradle.properties文件中,一切将按预期工作。

    注意,这不是臭名昭著的d8错误。 R8是取代ProGuard的用于代码收缩和混淆的新工具,默认情况下已在Android Studio 3.2 Canary中启用。

    选项2:(由Google提供)

    如果要使用R8收缩器,请按以下方式编辑项目build.gradle:(注意r8类路径必须位于构建工具类路径之上)

    buildscript {
         repositories {
            jcenter()
            google()
    
            maven {
                url "http://storage.googleapis.com/r8-releases/raw/master"
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:ff9c89416cc1c8adf83d481a1e5fd515fcb893b9'
            classpath 'com.android.tools.build:gradle:3.3.0-alpha08'
        }
    }
    

    10-06 05:53