Generación APK firmada con Android: Proguard excepción para la clase / método referenciado no encontrado
Necesito generar un APK firmado para Play Store. (Usando Android Studio) Si lo hago sin proguard (minifyEnabled false en build.gradle) todo funciona bien!
Si lo activo con parámetros predeterminados:
- Instalación de la aplicación de Android a través del servicio OTA
- Error al descargar .apk desde el sitio web de Asp.net usando el navegador de teléfonos Android
- Instalar apk desde otro programa
- Forma completa de .apk en android
- Copiar android .apk a otro archivo .apk a través de código java y sobre-montar sus archivos de activos?
buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
Recibo estas advertencias
:app:proguardRelease Warning: com.android.volley.error.VolleyErrorHelper$1: can't find superclass or interface com.google.gson.reflect.TypeToken Warning: com.android.volley.error.VolleyErrorHelper: can't find referenced class com.google.gson.Gson Warning: com.android.volley.error.VolleyErrorHelper: can't find referenced class com.google.gson.Gson Warning: com.android.volley.error.VolleyErrorHelper: can't find referenced method 'java.lang.reflect.Type getType()' in program class com.android.volley.error.VolleyErrorHelper$1 Warning: com.android.volley.error.VolleyErrorHelper: can't find referenced class com.google.gson.Gson Warning: com.android.volley.error.VolleyErrorHelper$1: can't find referenced class com.google.gson.reflect.TypeToken Warning: com.android.volley.error.VolleyErrorHelper$1: can't find referenced class com.google.gson.reflect.TypeToken Warning: com.android.volley.error.VolleyErrorHelper$1: can't find referenced class com.google.gson.reflect.TypeToken Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.Gson Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.Gson Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.Gson Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.JsonSyntaxException Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.JsonSyntaxException Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.Gson Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.JsonSyntaxException Warning: com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getContentLengthLong()' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl Warning: com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getHeaderFieldLong(java.lang.String,long)' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl Warning: okio.DeflaterSink: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement Warning: okio.Okio: can't find referenced class java.nio.file.Files Warning: okio.Okio: can't find referenced class java.nio.file.Files Warning: okio.Okio: can't find referenced class java.nio.file.Files Warning: okio.Okio: can't find referenced class java.nio.file.Path Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption Warning: okio.Okio: can't find referenced class java.nio.file.Path Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption Warning: okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement Warning: okio.Okio: can't find referenced class java.nio.file.Path Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption Warning: okio.Okio: can't find referenced class java.nio.file.Path Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption Warning: okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement Warning: there were 28 unresolved references to classes or interfaces. You may need to add missing library jars or update their versions. If your code works fine without the missing classes, you can suppress the warnings with '-dontwarn' options. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass) Warning: there were 3 unresolved references to program class members. Your input classes appear to be inconsistent. You may need to recompile the code. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember) Exception while processing task java.io.IOException: Please correct the above warnings first. at proguard.Initializer.execute(Initializer.java:473) at proguard.ProGuard.initialize(ProGuard.java:233) at proguard.ProGuard.execute(ProGuard.java:98) at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:1074) at com.android.build.gradle.tasks.AndroidProGuardTask.doMinification(AndroidProGuardTask.java:137) at com.android.build.gradle.tasks.AndroidProGuardTask$1.run(AndroidProGuardTask.java:113) at com.android.builder.tasks.Job.runTask(Job.java:48) at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41) at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:227) at java.lang.Thread.run(Thread.java:745) :app:dexRelease UP-TO-DATE :app:validateExternalOverrideSigning :app:packageRelease
Y el proceso de construcción se detiene con este mensaje:
Error:Execution failed for task ':app:packageRelease'. > Unable to compute hash of ...\app\build\intermediates\classes-proguard\release\classes.jar
Después de varias tentativas he encontrado una forma de eliminar las advertencias con estas líneas en mi "proguard-rules.pro":
-dontwarn com.android.volley.** -dontwarn com.squareup.okhttp.** -dontwarn okio.**
Sin embargo, el proceso de construcción sigue siendo un error! Alguien tiene una solución para este problema?
¡Gracias! Davide
- ¿Cómo se instala un archivo APK en el emulador de Android?
- Convertir apk en zip flashable en clockWorkMod?
- ¿Cómo mejorar el tiempo de inicio de una aplicación para Android?
- ¿Es incluso posible modificar .apk, agregando la clase adicional a .dex y re-embalar con manifest.xml modificado?
- Error al ejecutar aapt dump badging - Google Play Store
- Android Volley Firmado apk problema
- ¿Cómo saber el uso del archivo .apk al almacén de claves para firmar?
- No se puede firmar la versión APK -: app: shrinkReleaseMultiDexComponents FALLED
Después de varios intentos … aquí la solución:
Primero configure el dontwarn según lo sugerido por Raymond (quizá esto no es necesario pero lo dejé):
-dontwarn com.google.gson.** -dontwarn java.nio.file.** -dontwarn org.codehaus.mojo.animal_sniffer.** -dontwarn com.squareup.okhttp.internal.huc.** -dontwarn com.android.volley.error.**
A continuación, configure Proguard para omitir mi biblioteca:
-keep class com.android.volley.error.** { *; } -keep class com.squareup.okhttp.internal.huc.** { *; } -keep class okio.** { *; }
Ather que la compilación estaba bien, pero en tiempo de ejecución de la aplicación se estrelló. Por lo tanto, para evitar este problema, he añadido estas líneas:
-keep class android.support.design.widget.** { *; } -keep interface android.support.design.widget.** { *; } -dontwarn android.support.design.**
Basado en una cierta información encontrada de este hilo:
Java.lang.RuntimeException: No se pudo inflar subclase de comportamiento
Con esta configuración puedo generar un APK firmado de mi aplicación.
Usted tiene que aplicar dontwarn
a la clase referenciada en su lugar.
Por ejemplo:
-dontwarn com.google.gson.** -dontwarn java.nio.file.**