Xamarin.Android Proguard – Número da versão da class não suportada 52.0

Estou tentando usar o Proguard no meu projeto Xamarin.Android, mas a compilation falha com o erro Unsupported class version number [52.0] (maximum 51.0, Java 1.7)

Eu vi dessas duas perguntas que pode ser uma incompatibilidade entre Java 7 e Java 8, mais precisamente algumas versões do proguard não suportam Java 8. No entanto, em Xamarin Preferences -> SDK Location, o Java SDK aponta para o JDK 7: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home

Existe algum lugar onde o proguard possa ser configurado com mais precisão? Alguma outra ideia?

Aqui está o log de falha:

java.io.IOException: Não é possível ler [/Library/Frameworks/Xamarin.Android.framework/Versions/7.0.0-18/lib/xbuild-frameworks/MonoAndroid/v7.0/mono.android.jar] (Can ‘t process class [android / app / ActivityTracker.class] (Número da versão da class não suportada [52.0] (máximo 51.0, Java 1.7))) em proguard.InputReader.readInput (InputReader.java:230) em proguard.InputReader.readInput ( InputReader.java:200) em proguard.InputReader.readInput (InputReader.java:178) em proguard.InputReader.execute (InputReader.java:78) em proguard.ProGuard.readInput (ProGuard.java:196) em proguard.ProGuard. execute (ProGuard.java:78) em proguard.ProGuard.main (ProGuard.java:492) Causado por: java.io.IOException: Não é possível processar a class [android / app / ActivityTracker.class] (Número da versão da class não suportada [ 52.0] (máximo 51.0, Java 1.7)) em proguard.io.ClassReader.read (ClassReader.java:112) em proguard.io.FilteredDataEntryReader.read (FilteredDataEntryReader.java:87) em proguard.io.JarReader.read (JarReader .java: 65) em proguard.io.Director yPump.readFiles (DirectoryPump.java:65) em proguard.io.DirectoryPump.pumpDataEntries (DirectoryPump.java:53) em proguard.InputReader.readInput (InputReader.java:226) … 6 mais Causado por: java.lang. UnsupportedOperationException: Número da versão da class não suportada [52.0] (máximo 51.0, Java 1.7) em proguard.classfile.util.ClassUtil.checkVersionNumbers (ClassUtil.java:140) em proguard.classfile.io.ProgramClassReader.visitProgramClass (ProgramClassReader.java:88) em proguard.classfile.ProgramClass.accept (ProgramClass.java:346) at proguard.io.ClassReader.read (ClassReader.java:91) … mais 11

9 Aviso (s) 1 Erro (s)

    Você precisa atualizar o padrão do Android SDK proguard.jar com a versão mais recente do Proguard encontrada aqui:

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

    Eu recomendaria que você instalasse isso do lado da versão padrão que o Android envia no android-sdk\tools\proguard . Basta renomear a pasta existente para outra coisa e adicionar a nova versão do proguard .

    Isto está listado nas notas de lançamento do Xamarin.Android 7.0:

    https://developer.xamarin.com/releases/android/xamarin.android_7/xamarin.android_7.0/

    Em que o seguinte bug também foi registrado:

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

    Que é coordenado com um pull request no repository Xamarin.Android:

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

    Resposta Simples

    De acordo com a documentação, você precisa atualizar a versão do proguard (a partir da versão 5, ele suporta o Java 8) e verificar se está usando o jdk1.8

    JDK 1.8 – até API 24+

    JDK 1.7 – até API 23

    JDK 1.6 – até API 20

    como atualizar do console do pacote escreva este comando

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

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

    ou faça o download do proguard manualmente e substitua-o pela versão atual

    YOUR_SDK -> ferramentas -> proguard -> (exclua todos os arquivos antigos, descompacte a nova versão)

    Resposta Detalhada Se você ativar o Nogut android alvo e ativar o Multi-Dex ou o ProGuard, será necessário usar a versão ProGuard adequada (como o ToolMakerSteve disse depender do ProGuard), certifique-se de usar o java 8 em tools -> options -> xamarin -> java e atualize a versão ProGuard

    Atualizar resposta

    verifique se a versão da biblioteca de suporte é compatível com a versão de destino, se você segmentar

    O Android 7 (api 24) significa que sua biblioteca de suporte deve ser 24

    Android 7.1 (api 25) significa que sua biblioteca de suporte deve ser 25

    para toda a biblioteca de suporte e se você estiver usando os serviços do Google Play bem

    Eu também estava enfrentando o mesmo problema no meu Windows 10 x64 e visual studio 2015. Eu configurei o caminho do JDK para o JDK 1.8 nas configurações do Android nas ferramentas do Visual Studio -> opções -> xamarin -> localização do kit de desenvolvimento java. ele estava apontando para “C: \ Arquivos de Programas (x86) \ Java \ jdk1.7.0_55” e eu fiz isso para “C: \ Arquivos de Programas \ Java \ jdk1.8.0_31”, e o problema foi corrigido.

    Eu tive um problema em que a Proguard estava removendo as bibliotecas do Google Play Services do meu aplicativo.

    Além de seguir a resposta de @Jon Douglas acima, eu tive que adicionar as seguintes linhas de texto ao arquivo proguard-android.txt encontrado nesta pasta:

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

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

    Arquivo completo de proguard-android.txt

     -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 -dontskipnonpubliclibraryclasss -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 -keepclassswithmembernames class * { native ; } # 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 classs, 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 ; } # 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 * {*;} -keepclassswithmembers class * { @android.support.annotation.Keep ; } -keepclassswithmembers class * { @android.support.annotation.Keep ; } -keepclassswithmembers class * { @android.support.annotation.Keep (...); }