同时使用 Library Desugaring 和 R8/Proguard/minifyEnabled 时崩溃
Crash when using both Library Desugaring and R8/Proguard/minifyEnabled
我有一个 多模块 应用程序(minSdk 21
,AGP 7.0.0-alpha12
)在发布变体(Proguard/R8 启用)中启动时崩溃) 当使用 Java 8 脱糖时 following this guide
我知道这个错误与脱糖有关,因为如果我启用脱糖就会发生错误
compileOptions {
coreLibraryDesugaringEnabled true
}
而如果我禁用脱糖,则不会发生错误
compileOptions {
coreLibraryDesugaringEnabled false
}
堆栈跟踪:
java.lang.IncompatibleClassChangeError: Class j$.util.Collection implements non-interface class d.e (declaration of 'j$.util.Collection' appears in base.apk!classes2.dex)
at ja.s.f(Unknown Source:0)
at h4.g0.<clinit>(:4)
at y5.d1.C(:1)
at v8.f.<init>(:2)
at com.luminarlab.fontboard.KeyboardApp.<init>(:2)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76)
at androidx.core.app.CoreComponentFactory.instantiateApplication(Unknown Source:0)
at android.app.Instrumentation.newApplication(Instrumentation.java:1155)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1223)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6431)
at android.app.ActivityThread.access00(ActivityThread.java:219)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940)
我尝试使用 proguard-rules.pro
中的 -keep class java.util.** { *; }
修复错误,但它没有任何改变。
感谢任何帮助、提示或答案。提前致谢!
原来 developers.android.com 上的指南已经过时了。目前它使用 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
,但最新版本是 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
。
更新到最新版本解决了我的问题。您可以找到最新版本 here
我有一个 多模块 应用程序(minSdk 21
,AGP 7.0.0-alpha12
)在发布变体(Proguard/R8 启用)中启动时崩溃) 当使用 Java 8 脱糖时 following this guide
我知道这个错误与脱糖有关,因为如果我启用脱糖就会发生错误
compileOptions {
coreLibraryDesugaringEnabled true
}
而如果我禁用脱糖,则不会发生错误
compileOptions {
coreLibraryDesugaringEnabled false
}
堆栈跟踪:
java.lang.IncompatibleClassChangeError: Class j$.util.Collection implements non-interface class d.e (declaration of 'j$.util.Collection' appears in base.apk!classes2.dex)
at ja.s.f(Unknown Source:0)
at h4.g0.<clinit>(:4)
at y5.d1.C(:1)
at v8.f.<init>(:2)
at com.luminarlab.fontboard.KeyboardApp.<init>(:2)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76)
at androidx.core.app.CoreComponentFactory.instantiateApplication(Unknown Source:0)
at android.app.Instrumentation.newApplication(Instrumentation.java:1155)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1223)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6431)
at android.app.ActivityThread.access00(ActivityThread.java:219)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1859)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940)
我尝试使用 proguard-rules.pro
中的 -keep class java.util.** { *; }
修复错误,但它没有任何改变。
感谢任何帮助、提示或答案。提前致谢!
原来 developers.android.com 上的指南已经过时了。目前它使用 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
,但最新版本是 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
。
更新到最新版本解决了我的问题。您可以找到最新版本 here