xamarin xamarin.android android-proguard

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:

https://github.com/xamarin/xamarin-android/pull/209


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.