我刚刚使用 Gradle 构建了一个用于发布的 APK(ProGuard 4.9 并已签名).当我启动应用程序时,它会因此错误而崩溃:
I've just built an APK using Gradle for release (ProGuard 4.9 and signed). When I launch the app it crash on this error :
E/AndroidRuntime( 8662): java.lang.AssertionError: impossible
E/AndroidRuntime( 8662): at java.lang.Enum$1.create(Enum.java:44)
E/AndroidRuntime( 8662): at java.lang.Enum$1.create(Enum.java:35)
E/AndroidRuntime( 8662): at libcore.util.BasicLruCache.get(BasicLruCache.java:54)
E/AndroidRuntime( 8662): at java.lang.Enum.getSharedConstants(Enum.java:210)
E/AndroidRuntime( 8662): at java.lang.Enum.valueOf(Enum.java:190)
E/AndroidRuntime( 8662): at kr.infli.s.Z(Inflikr.java:390)
E/AndroidRuntime( 8662): at kr.infli.a.ev(Inflikr.java:409)
E/AndroidRuntime( 8662): at kr.infli.activity.InflikrActivity.onResume(InflikrActivity.java:231)
E/AndroidRuntime( 8662): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1192)
E/AndroidRuntime( 8662): at android.app.Activity.performResume(Activity.java:5310)
E/AndroidRuntime( 8662): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2778)
E/AndroidRuntime( 8662): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2817)
E/AndroidRuntime( 8662): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
E/AndroidRuntime( 8662): at android.app.ActivityThread.access$800(ActivityThread.java:135)
E/AndroidRuntime( 8662): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
E/AndroidRuntime( 8662): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 8662): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 8662): at android.app.ActivityThread.main(ActivityThread.java:5017)
E/AndroidRuntime( 8662): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 8662): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
E/AndroidRuntime( 8662): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
E/AndroidRuntime( 8662): Caused by: java.lang.NoSuchMethodException: values []
E/AndroidRuntime( 8662): at java.lang.Class.getMethod(Class.java:661)
E/AndroidRuntime( 8662): at java.lang.Class.getDeclaredMethod(Class.java:623)
E/AndroidRuntime( 8662): at java.lang.Enum$1.create(Enum.java:41)
E/AndroidRuntime( 8662): ... 20 more
看起来这个错误不应该发生:https://android.googlesource.com/platform/libcore/+/9edf43dfcc35c761d97eb9156ac4254152ddbc55/libdvm/src/main/java/java/lang/Enum.java
Looks like this error should not happen : https://android.googlesource.com/platform/libcore/+/9edf43dfcc35c761d97eb9156ac4254152ddbc55/libdvm/src/main/java/java/lang/Enum.java
我的 build.gradle 包含:
My build.gradle contains :
buildTypes {
release {
runProguard true
proguardFile file('./proguard-project.txt')
signingConfig signingConfigs.release
}
}
我的 proguard-project.txt 包含
My proguard-project.txt contains
-useuniqueclassmembernames
-keepattributes SourceFile,LineNumberTable
+ a bunch of keep class, dontnote, dontwarn,...
当我从 build.gradle 中删除 ProGuard 时,它不会崩溃.
When I remove ProGuard from build.gradle it do not crash.
当我在 Ant 构建中使用 ProGuard 时,它可以工作(我最近迁移到 Gradle).
When I was using ProGuard from an Ant build it worked (I recently migrated to Gradle).
Gradle + ProGuard 有任何已知问题吗?
Any known issue with Gradle + ProGuard ?
谢谢
你必须告诉 ProGuard 保留一些 enum 方法.
You have to tell ProGuard to keep some enum methods.
Android SDK 工具使用这个 ProGuard 配置来实现它:
The Android SDK tools use this ProGuard configuration to achieve it:
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
您可以将上述规则添加到您的 ProGuard 配置中,也可以(我更喜欢)包含默认的 Android 规则:
You can either add the above rule to your ProGuard configuration or you can (what I'd prefer) include the default Android rules:
minifyEnabled true
proguardFile getDefaultProguardFile('proguard-android.txt')
proguardFile file('./proguard-project.txt')
这篇关于Android 发布 APK 因 java.lang.AssertionError 崩溃:在 java.lang.Enum 中不可能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
更新到 Android Build Tools 25.1.6 GCM/FCM 后出现 IncompIncompatibleClassChangeError after updating to Android Build Tools 25.1.6 GCM / FCM(更新到 Android Build Tools 25.1.6 GCM/FCM 后出现 Incompatible
如何在 gradle 中获取当前风味How to get current flavor in gradle(如何在 gradle 中获取当前风味)
如何修复“意外元素<查询>在“清单How to fix quot;unexpected element lt;queriesgt; found in lt;manifestgt;quot; error?(如何修复“意外元素lt;查询gt;在“清单中找到错误
基于 Android Gradle 中多风味库的多风味应用Multi flavor app based on multi flavor library in Android Gradle(基于 Android Gradle 中多风味库的多风味应用)
Android 依赖在编译和运行时有不同的版本Android dependency has different version for the compile and runtime(Android 依赖在编译和运行时有不同的版本)
本地 aar 库的传递依赖Transitive dependencies for local aar library(本地 aar 库的传递依赖)