AndroidX on Android Studio 3.2 - 运行 应用程序时出现 VerifyError
AndroidX on Android Studio 3.2 - VerifyError when running app
将我的应用程序迁移到 AndroidStudio 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.** { *; }
还尝试查看映射文件以了解 class d.a
是什么,但它没有提示我问题的方向。
Jetifier 已启用
android.useAndroidX=true
android.enableJetifier=true
我是不是漏掉了什么?这有没有可能是 androix.preference 库的问题?
- 在 Google issue tracker 上打开了一个错误。
java 类编译时间和运行时间的不一致可能导致java.lang.VerifyError
,
尝试文件 -> 无效缓存/重新启动... -> 无效并重新启动
已解决。
将 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'
}
}
将我的应用程序迁移到 AndroidStudio 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.** { *; }
还尝试查看映射文件以了解 class d.a
是什么,但它没有提示我问题的方向。
Jetifier 已启用
android.useAndroidX=true
android.enableJetifier=true
我是不是漏掉了什么?这有没有可能是 androix.preference 库的问题?
- 在 Google issue tracker 上打开了一个错误。
java 类编译时间和运行时间的不一致可能导致java.lang.VerifyError
,
尝试文件 -> 无效缓存/重新启动... -> 无效并重新启动
已解决。
将 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'
}
}