Android Studio 3.2上的AndroidX - 运行应用时的VerifyError

问题描述 投票:8回答:2

将我的应用迁移到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库的一个问题吗?

android android-studio android-proguard androidx r8
2个回答
0
投票

编译时和运行时之间java类的不一致可能会导致java.lang.VerifyError,尝试文件 - >使缓存无效/重新启动... - >无效并重新启动


-1
投票

解决了。

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

请注意,这不是臭名昭着的d8错误。 R8是用于代码缩小和混淆的新工具,它取代了ProGuard,默认情况下它在Android Studio 3.2金丝雀上启用。

选项#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'
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.