Desbloqueo de APK de Android con java.lang.AssertionError: imposible en java.lang.Enum
Acabo de construir un APK usando Gradle para la liberación (ProGuard 4.9 y firmado). Cuando lanzo la aplicación se bloquea en este 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.sZ(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
Parece que este error no debería suceder: https://android.googlesource.com/platform/libcore/+/9edf43dfcc35c761d97eb9156ac4254152ddbc55/libdvm/src/main/java/java/lang/Enum.java
- Qué optimización es segura que todavía permite -assumenosideeffects remociones
- Eliminar el registro con Proguard
- Problemas con OrmLite y obfuscation proguard
- Android, Proguard y Javamail
- Android - Proguard con httpcore y httpmime con Android Studio y Gradle
Mi build.gradle contiene:
buildTypes { release { runProguard true proguardFile file('./proguard-project.txt') signingConfig signingConfigs.release } }
Mi proguard-project.txt contiene
-useuniqueclassmembernames -keepattributes SourceFile,LineNumberTable + a bunch of keep class, dontnote, dontwarn,...
Cuando elimino ProGuard de build.gradle no se bloquea.
Cuando estaba usando ProGuard de una construcción de hormigas funcionó (recientemente migré a Gradle).
¿Algún problema conocido con Gradle + ProGuard?
Gracias
- ¿Cuál es la diferencia entre `com.example. **` y `com.example. ** {*;}`?
- ¿Cómo hacer que org.apache.http.legacy funcione con ProGuard (azure mobile services)?
- ProGuard - org.codehaus.jackson.map.JsonMappingException: No se encontró ningún constructor adecuado para el tipo
- Error: Error de ejecución para la tarea ': app: transformClassesAndResourcesWithProguardForDebug'
- La aplicación de Android se bloquea en la generación de versiones con el uso de Proguard y Dagger
- Proguard, clase de biblioteca depende de la clase del programa
- Proguard con Android y el cliente de la API de Google
- Proguard no obstruye las aplicaciones de Android
Tienes que decirle a ProGuard que guarde algunos métodos enum
.
Las herramientas SDK de Android utilizan esta configuración de ProGuard para lograrlo:
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }
Puede agregar la regla anterior a su configuración de ProGuard o puede (lo que yo preferiría) incluir las reglas predeterminadas de Android:
runProguard true proguardFile getDefaultProguardFile('proguard-android.txt') proguardFile file('./proguard-project.txt')
- No se puede eliminar el archivo de almacenamiento externo en android mediante programación
- Android: startActivityForResult () con funcionalidad de botón BACK