Android Studio 3.2 上的 AndroidX - 运行应用程序时出现验证错误

Posted

技术标签:

【中文标题】Android Studio 3.2 上的 AndroidX - 运行应用程序时出现验证错误【英文标题】:AndroidX on Android Studio 3.2 - VerifyError when running app 【发布时间】:2019-02-01 09:36:12 【问题描述】:

将我的应用迁移到 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

我在这里遗漏了什么吗?这可能是 android.preference 库的问题吗?

在Google issue tracker 上打开了一个错误。

【问题讨论】:

你用的是proguard还是dexguard? @shizhen proguard 【参考方案1】:

已解决。

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'
    

【讨论】:

注释掉 -dontwarn 然后检查 ProGuard 输出可能有助于创建正确的规则。 使用 android.enableR8=false 禁用 R8 不相关,因为已报告 ProGuard 的问题。使用 R8 主版本不是解决方案,只能在调试特定问题或测试特定修复时使用。 @sgjesse 问题出在/曾经是 R8。启用后,它将取代 proguard。 #2 解决方案由 Google 工程师提供。【参考方案2】:

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

【讨论】:

试过了,没用。这是一个真正的问题,而不仅仅是缓存错误

以上是关于Android Studio 3.2 上的 AndroidX - 运行应用程序时出现验证错误的主要内容,如果未能解决你的问题,请参考以下文章

从 Ramdisk 运行 Android Studio 的问题

错误:将 Android Studio 更新到 3.2 后,无法更改配置 ':android:kapt' 的属性

android studio 3.2 bundle.gradle 与2.2区别

通过更新到 Android Studio 3.2 迁移到 AndroidX

android studio怎么设置布局

Android Studio 3.2 Preview 中的导航预览不可用