Xamarin.Android Proguard-Número de versión de clase no compatible 52.0
android-proguard (5)
También estaba enfrentando el mismo problema en mi Windows 10 x64 y Visual Studio 2015. He configurado la ruta JDK a JDK 1.8 en la configuración de Android en las herramientas de Visual Studio -> opciones -> xamarin -> ubicación del kit de desarrollo de Java. apuntaba a "C: / Archivos de programa (x86) / Java / jdk1.7.0_55" y llegué a "C: / Archivos de programa / Java / jdk1.8.0_31", y el problema se ha solucionado.
Estoy tratando de usar Proguard en mi proyecto Xamarin.Android, pero la compilación falla con el error
Unsupported class version number [52.0] (maximum 51.0, Java 1.7)
Vi de esas
two
questions
que puede haber una falta de coincidencia entre Java 7 y Java 8, más precisamente algunas versiones de proguard no son compatibles con Java 8. Sin embargo, en Preferencias de Xamarin -> SDK Location, Java SDK apunta a JDK 7:
/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
¿Hay algún lugar donde se pueda configurar Proguard con mayor precisión? ¿Alguna otra idea?
Aquí está el registro de fallas:
java.io.IOException: No se puede leer [/Library/Frameworks/Xamarin.Android.framework/Versions/7.0.0-18/lib/xbuild-frameworks/MonoAndroid/v7.0/mono.android.jar] (Can procese la clase [android / app / ActivityTracker.class] (número de versión de clase no admitida [52.0] (máximo 51.0, Java 1.7))) en proguard.InputReader.readInput (InputReader.java:230) en proguard.InputReader.readInput ( InputReader.java:200) en proguard.InputReader.readInput (InputReader.java:178) en proguard.InputReader.execute (InputReader.java:78) en proguard.ProGuard.readInput (ProGuard.java:196) en proguard.ProGuard. ejecutar (ProGuard.java:78) en proguard.ProGuard.main (ProGuard.java:492) Causado por: java.io.IOException: No se puede procesar la clase [android / app / ActivityTracker.class] (Número de versión de clase no admitida [ 52.0] (máximo 51.0, Java 1.7)) en proguard.io.ClassReader.read (ClassReader.java:112) en proguard.io.FilteredDataEntryReader.read (FilteredDataEntryReader.java:87) en proguard.io.JarReader.read (JarReader .java: 65) en proguard.io.Director yPump.readFiles (DirectoryPump.java:65) en proguard.io.DirectoryPump.pumpDataEntries (DirectoryPump.java:53) en proguard.InputReader.readInput (InputReader.java:226) ... 6 más Causado por: java.lang. UnsupportedOperationException: número de versión de clase no admitida [52.0] (máximo 51.0, Java 1.7) en proguard.classfile.util.ClassUtil.checkVersionNumbers (ClassUtil.java:140) en proguard.classfile.io.ProgramClassReader.visitProgramClass (ProgramvalassR88). en proguard.classfile.ProgramClass.accept (ProgramClass.java:346) en proguard.io.ClassReader.read (ClassReader.java:91) ... 11 más
9 Advertencia (s) 1 Error (es)
Tuve un problema en el que Proguard estaba eliminando las bibliotecas de Google Play Services de mi aplicación.
Además de seguir la respuesta anterior de
, tuve que agregar las siguientes líneas de texto al archivo
proguard-android.txt
que se encuentra en esta carpeta:
/(Path to your Android SDK Folder)/tools/proguard
-keep public class com.google.android.gms.* { public *; }
-dontwarn com.google.android.gms.**
Archivo proguard-android.txt completo
-keep public class com.google.android.gms.* { public *; }
-dontwarn com.google.android.gms.**
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
-dontoptimize
-dontpreverify
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own project configuration file;
# instead you will need to point to the
# "proguard-android-optimize.txt" file instead of this one from your
# project.properties file.
-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
native <methods>;
}
# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
# The support library contains references to newer platform versions.
# Don''t warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.**
# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
proguard.jar
actualizar el SDK de Android predeterminado
proguard.jar
con la última versión de Proguard que se encuentra aquí:
https://sourceforge.net/projects/proguard/files/
Recomiendo que instale esto en el lado de la versión predeterminada que Android incluye en
android-sdk/tools/proguard
.
Simplemente cambie el nombre de la carpeta existente a otra y agregue la nueva versión de
proguard
.
Esto aparece en las notas de la versión de Xamarin.Android 7.0:
https://developer.xamarin.com/releases/android/xamarin.android_7/xamarin.android_7.0/
En el que también se registró el siguiente error:
https://bugzilla.xamarin.com/show_bug.cgi?id=44187
Que se coordina con una solicitud de extracción en el repositorio de Xamarin.Android:
Respuesta simple
De acuerdo con la documentación, necesita actualizar la versión proguard (a partir de la versión 5, es compatible con Java 8) y asegúrese de estar usando jdk1.8
JDK 1.8: hasta API 24+
JDK 1.7 - hasta API 23
JDK 1.6 - hasta API 20
cómo actualizar desde la consola del paquete, escriba este comando
PM> Install-Package name.atsushieno.proguard.facebook
https://www.nuget.org/packages/name.atsushieno.proguard.facebook
o descargue Proguard manualmente y reemplácelo con la versión actual
YOUR_SDK -> herramientas -> proguard -> (eliminar todos los archivos antiguos, descomprimir la nueva versión)
Respuesta detallada si habilita Android Nogut de destino y habilita Multi-Dex o ProGuard, debe usar la versión ProGuard adecuada (como ToolMakerSteve dijo que dependen de ProGuard), así que asegúrese de apuntar a Java 8 desde herramientas -> opciones -> xamarin -> java y actualice la versión ProGuard
Actualizar respuesta
asegúrese de que su versión de biblioteca de soporte sea compatible con la versión de destino, si tiene como objetivo
Android 7 (api 24) significa que su biblioteca de soporte debe ser 24
Android 7.1 (api 25) significa que su biblioteca de soporte debe ser 25
a toda la biblioteca de soporte y si usa los servicios de Google Play también
Usando Visual Studio
Si está utilizando Visual Studio 2017 o 2019, tenga en cuenta que estas aplicaciones tienen su protector. Para 2019, versión proguard: 5.3.2. Para mí, necesitaba la versión 6.0.3, así que hice una copia de seguridad del archivo proguard.jar en:
C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/MSBuild/Xamarin/Android/proguard/lib
Y copié el último de zip desde el sitio de sourceforge.