Lio*_*luz 9 android android-studio android-proguard androidx r8
将我的应用迁移到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)
Run Code Online (Sandbox Code Playgroud)
我试过排除所有AndroidX库:
-dontwarn androidx.**
-keep class androidx.** { *; }
-keep interface androidx.** { *; }
Run Code Online (Sandbox Code Playgroud)
但问题仍然存在,除非我基本上取消使用的混淆
-keep class com.myapp.package.** { *; }
Run Code Online (Sandbox Code Playgroud)
还尝试查看映射文件中的哪个类d.a,但它没有提示我问题的方向.
Jetifier已启用
android.useAndroidX=true
android.enableJetifier=true
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?这有可能是androix.preference库的一个问题吗?
解决了。
添加android.enableR8=false到您的project gradle.properties文件中,一切都会按预期工作。
请注意,这不是臭名昭著的 d8 错误。R8 是一个新的代码压缩和混淆工具,它取代了 ProGuard,并且在 Android Studio 3.2 Canary 上默认启用。
选项#2:(这是由Google提供的)
如果您想使用 R8 Shrinker,请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'
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |