首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AndroidStudio3.2-VerifyError上运行应用程序时的VerifyError

在AndroidStudio3.2-VerifyError上运行应用程序时的VerifyError
EN

Stack Overflow用户
提问于 2018-08-26 18:44:36
回答 2查看 1.3K关注 0票数 9

将我的应用程序迁移到AndroidStudio3.2上的AndroidX库。在调试中运行时,一切都按预期的方式工作,但是如果我生成一个签名的APK,使用Proguard混淆-我得到了以下错误:

代码语言:javascript
复制
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库:

代码语言:javascript
复制
-dontwarn androidx.**
-keep class androidx.** { *; }
-keep interface androidx.** { *; }

但是问题还在继续,除非我基本上取消了使用

代码语言:javascript
复制
-keep class com.myapp.package.** { *; }

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

启用Jetifier

代码语言:javascript
复制
android.useAndroidX=true
android.enableJetifier=true

我是不是漏掉了什么?这有可能是androix.preference库的问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-05 13:34:59

解决了,

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

注意,这不是臭名昭著的d8错误。R8是一种用于代码收缩和混淆的新工具,它取代了ProGuard,默认情况下它在AndroidStudio3.2Canary上启用。

选项2:(由谷歌提供)

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

代码语言:javascript
复制
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'
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-08-27 09:32:53

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52029287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档