web-dev-qa-db-fra.com

Xamarin.Android Proguard - Numéro de version de classe non pris en charge 52.0

J'essaie d'utiliser Proguard dans mon projet Xamarin.Android, mais la compilation échoue avec l'erreur Unsupported class version number [52.0] (maximum 51.0, Java 1.7).

J'ai vu de ces deuxquestions qu'il pourrait y avoir une discordance entre Java 7 et Java 8 , plus précisément certaines versions de proguard ne supportent pas Java 8. Cependant, dans les préférences Xamarin -> Emplacement du SDK, Java, SDK pointe vers JDK 7: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home

Existe-t-il un endroit où proguard peut être configuré plus précisément? Une autre idée?

Voici le journal des échecs:

Java.io.IOException: impossible de lire [/Library/Frameworks/Xamarin.Android.framework/Versions/7.0.0-18-18/lib/xbuild-frameworks/MonoAndroid/v7.0/mono.Android.jar] (peut ne traite pas la classe [Android/app/ActivityTracker.class] (numéro de version de la classe non prise en charge [52.0] (maximum 51.0, Java 1,7))) à proguard.InputReader.readInput (InputReader.Java: 230) à proguard.InputReader.readInput (InputReader.Java:200) à proguard.InputReader.readInput (InputReader.Java:178) à proguard.InputReader.execute (InputReader.Java:78) à proguard.ProGuard.read.put (ProGuard. Java: 196) sur proguard.ProGuard.execute (ProGuard.Java:78) sur proguard.ProGuard.main (ProGuard.Java:492) Causée par: Java.io.IOException: Impossible de traiter la classe [Android/app/ActivityTracker .class] (Numéro de version de la classe non prise en charge [52.0] (51.0 maximum, Java 1,7))) dans proguard.io.ClassReader.read (ClassReader.Java:112) dans proguard.io.FilteredDataEntryReader. read (FilteredDataEntryReader.Java:87) à proguard.io.JarReader.read (JarReader.Java:65) à pr oguard.io.DirectoryPump.readFiles (DirectoryPump.Java:65) à proguard.io.DirectoryPump.pumpDataEntries (DirectoryPump.Java:53) à proguard.InputReader.readInput (InputReader.Java:226) ... 6 autres causés par: Java.lang.UnsupportedOperationException: numéro de version de classe non pris en charge [52.0] (51.0 maximum, Java 1,7)) dans proguard.classfile.util.ClassUtil.checkVersionNumbers (ClassUtil.Java:140) dans proguard.classfile. .io.ProgramClassReader.visitProgramClass (ProgramClassReader.Java:88) sur proguard.classfile.ProgramClass.accept (ProgramClass.Java:346) sur proguard.io.ClassReader.read (ClassReader.Java:91) ... 11 autres

9 avertissement (s) 1 erreur (s)

44
Eino Gourdin

Vous devez mettre à jour le fichier par défaut Android SDK proguard.jar avec la dernière version de Proguard disponible ici:

https://sourceforge.net/projects/proguard/files/

Je recommanderais que vous installiez ceci du côté de la version par défaut qui Android est livré dans Android-sdk\tools\proguard. Renommez simplement le dossier existant en quelque chose d'autre et ajoutez la nouvelle version de proguard.

Ceci est listé dans les notes de publication de Xamarin.Android 7.0:

https://developer.xamarin.com/releases/Android/xamarin.Android_7/xamarin.Android_7.0/

Dans lequel le bogue suivant a également été enregistré:

https://bugzilla.xamarin.com/show_bug.cgi?id=44187

Ce qui est coordonné avec une demande d'extraction dans le référentiel Xamarin.Android:

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

110
Jon Douglas

J'ai eu un problème lorsque Proguard supprimait les bibliothèques de services Google Play de mon application.

En plus de suivre @ Jon Douglas 'réponse ci-dessus, je devais ajouter les lignes de texte suivantes au fichier proguard-Android.txt Se trouvant dans ce dossier:

/(Path to your Android SDK Folder)/tools/proguard

-keep public class com.google.Android.gms.* { public *; }
-dontwarn com.google.Android.gms.**

Fichier proguard-Android.txt complet

-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>(...);
}
4
Brandon Minnick

Réponse simple

Selon la documentation, vous avez besoin de la version de mise à jour (à partir de version 5 il supporte Java 8) et assurez-vous que vous utilisez jdk1.8

JDK 1.8 - jusqu'à API 24+

JDK 1.7 - jusqu'à l'API 23

JDK 1.6 - jusqu'à l'API 20

comment mettre à jour à partir de la console du package, écrivez cette commande

PM> Install-Package name.atsushieno.proguard.facebook 

https://www.nuget.org/packages/name.atsushieno.proguard.facebook

ou téléchargez proguard manuellement et remplacez-le par la version actuelle

YOUR_SDK -> outils -> proguard -> (effacez tous les anciens fichiers, décompressez la nouvelle version)

Réponse détaillée si vous activez la cible Android Nogut et vous activez Multi-Dex ou ProGuard, vous devez utiliser la version appropriée de ProGuard ( comme ToolMakerSteve a déclaré qu'ils dépendent de ProGuard), assurez-vous donc de cibler Java 8 à partir d'outils -> options -> xamarin -> Java et mettez à jour la version de ProGuard

Mise à jour de la réponse

assurez-vous que la version de votre bibliothèque de support est compatible avec la version cible, si vous ciblez

Android 7 (api 24) signifie que votre bibliothèque de support devrait être 24

Android 7.1 (api 25) signifie que votre bibliothèque de support doit être de 25

à toutes les bibliothèques de support et si vous utilisez les services de Google Play aussi

3
Mina Fawzy

J'avais également le même problème sous Windows 10 x 64 et Visual Studio 2015. J'ai défini le chemin d'accès du JDK sur JDK 1.8 sous Android dans les outils Visual Studio -> options -> xamarin -> Emplacement du kit de développement Java: il pointait vers "C:\Program Files (x86)\Java\jdk1.7.0_55" et je l'avais mis dans "C:\Program Files\Java\jdk1.8.0_31" et le problème a été résolu. fixé.

1
Haider Minto

tilisation de Visual Studio

Si vous utilisez Visual Studio 2017 ou 2019, veuillez noter que ces applications contiennent leur proguard. Pour 2019, version de proguard: 5.3.2. Pour moi, j'avais besoin de la version 6.0.3, j'ai donc fait une sauvegarde du fichier proguard.jar à:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\proguard\lib

Et copié le dernier de Zip à partir du site sourceforge.

0
Jahmic