2013-12-18 8 views
14

リリースのためにGradle(ProGuard 4.9および署名済み)を使用してAPKを作成しました。私はアプリを起動すると、このエラーでクラッシュ:このエラーは発生しないはずのようAndroidのリリースjava.lang.AssertionErrorでのAPKクラッシュ:java.lang.Enumでの無効

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

私のbuild.gradleは含まれています

buildTypes { 
    release { 
     runProguard true 
     proguardFile file('./proguard-project.txt') 
     signingConfig signingConfigs.release 
    } 
} 

マイProGuardの-project.txt含まれています

-useuniqueclassmembernames 
-keepattributes SourceFile,LineNumberTable 

+ a bunch of keep class, dontnote, dontwarn,... 

私はbuild.gradleからProGuardを削除するとクラッシュしません。

私はAntビルドからProGuardを使用していましたが、最近はGradleに移行しました。

Gradle + ProGuardに関する既知の問題はありますか?あなたは、いくつかのenum方法を保つためにProGuardのを指示する必要が

おかげ

答えて

24

のAndroid SDKツールは、それを達成するために、このProGuardの設定を使用します。

# 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のルールを含めることができます。

runProguard true 
proguardFile getDefaultProguardFile('proguard-android.txt') 
proguardFile file('./proguard-project.txt') 
+0

それはrunProguard'方法がなくなっている 'のように見えるので、私はちょうどproguardFiles getDefaultProguardFile( 'ProGuardの-android.txt')、ファイル( "ProGuardの-rules.txt")' –

+3

'にあなたの2行を組み合わせました@ DraškoKokić: 'runProguard'は[AndroidのminifyEnabledに名前が変更されましたGradle Plugin 1.0.0](http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0)を参照してください。 (あなたのリリースビルドタイプに 'minifyEnabled true'を指定する必要があります;さもなければProGuardは*実行されません)。 – Jonik

関連する問題