Xamarin Android Proguard-不支持的类版本号52.0

Xamarin Android Proguard-不支持的类版本号52.0,xamarin,xamarin.android,android-proguard,Xamarin,Xamarin.android,Android Proguard,我试图在我的Xamarin.Android项目中使用Proguard,但编译失败,错误为不支持的类版本号[52.0](最大51.0,Java 1.7) 我从中看到,可能是Java7和Java8不匹配,更确切地说,proguard的一些版本不支持Java8。然而,在Xamarin Preferences->SDK位置,Java SDK指向JDK 7:/Library/Java/JavaVirtualMachines/jdk1.7.079.JDK/Contents/Home 是否有任何地方可以更精确

我试图在我的Xamarin.Android项目中使用Proguard,但编译失败,错误为
不支持的类版本号[52.0](最大51.0,Java 1.7)

我从中看到,可能是Java7和Java8不匹配,更确切地说,proguard的一些版本不支持Java8。然而,在Xamarin Preferences->SDK位置,Java SDK指向JDK 7:
/Library/Java/JavaVirtualMachines/jdk1.7.079.JDK/Contents/Home

是否有任何地方可以更精确地配置proguard?还有别的想法吗

以下是故障日志:

java.io.IOException:无法读取 [/Library/Frameworks/Xamarin.Android.framework/Versions/7.0.0-18/lib/xbuild Frameworks/MonoAndroid/v7.0/mono.Android.jar] (无法处理类[android/app/ActivityTracker.class](不支持) 类版本号[52.0](最大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.readInput(proguard.java:196)位于 proguard.proguard.execute(proguard.java:78)位于 proguard.proguard.main(proguard.java:492)由以下原因引起: java.io.IOException:无法处理类 [android/app/ActivityTracker.class](不支持的类版本号) [52.0](最大51.0,Java 1.7))在 proguard.io.ClassReader.read(ClassReader.java:112)位于 proguard.io.filteredataentryreader.read(filteredataentryreader.java:87) 在proguard.io.JarReader.read(JarReader.java:65)中 proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)位于 proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)位于 proguard.InputReader.readInput(InputReader.java:226)。。。还有6个 原因:java.lang.UnsupportedOperationException:不支持的类 版本号[52.0](最大值为51.0,Java 1.7) proguard.classfile.util.ClassUtil.checkVersionNumber(ClassUtil.java:140) 在 proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:88) 在proguard.classfile.ProgramClass.accept(ProgramClass.java:346)中 proguard.io.ClassReader.read(ClassReader.java:91)。。。还有11个

9个警告1个错误


您需要使用以下最新版本的proguard更新默认的Android SDK
proguard.jar

我建议您将其安装在Android在
Android sdk\tools\proguard
中提供的默认版本的一侧。只需将现有文件夹重命名为其他文件夹,然后添加新版本的
proguard

这在Xamarin.Android 7.0发行说明中列出:

其中还记录了以下错误:

它与Xamarin.Android存储库中的拉取请求相协调:


在我的Windows 10 x64和visual studio 2015上,我也面临同样的问题。我已经在VisualStudio的android设置下将JDK路径设置为JDK 1.8
工具->选项->xamarin->java开发工具包位置。它指向“C:\Program Files(x86)\Java\jdk1.7.0\u 55”,我把它指向“C:\Program Files\Java\jdk1.8.0\u 31”,问题已经解决。

简单答案

根据文档,您需要更新proguard版本(从支持Java 8的it开始),并确保您使用的是jdk1.8

JDK 1.8-API 24之前的版本+

JDK 1.7-API 23之前的版本

JDK 1.6-API 20之前的版本

如何从软件包控制台更新编写此命令

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

或者手动下载并替换为当前版本

您的_SDK-->工具-->proguard-->(删除所有旧文件,解压缩新版本)

详细答案如果启用目标android Nogut并启用Multi-Dex或ProGuard,则需要使用正确的ProGuard版本(正如ToolMakerSteve所说,他们依赖ProGuard) 所以,请确保您从工具->选项->xamarin->java以Java8为目标,并更新ProGuard版本

更新答案

如果目标为,请确保您的支持库版本与目标版本兼容

Android 7(api 24)意味着您的支持库应该是24

Android 7.1(api 25)意味着您的支持库应该是25


如果您同时使用google play服务,我遇到一个问题,Proguard将google play服务库从我的应用程序中删除

除了上面的回答之外,我还必须将以下几行文本添加到该文件夹中的
proguard android.txt
文件中:

/(Android SDK文件夹路径)/tools/proguard

-keep public class com.google.android.gms.* { public *; }
-dontwarn com.google.android.gms.**
完整的proguard-android.txt文件
-保持公共类com.google.android.gms.*{public*;}
-dontwarn com.google.android.gms**
#这是ProGuard的配置文件。
# http://proguard.sourceforge.net/index.html#manual/usage.html
-dontusemixedcaseclassnames
-DontskipnonPublicLibraryClass
-冗长的
#默认情况下,优化处于关闭状态。Dex不喜欢代码运行
#通过ProGuard优化和预验证步骤(并执行一些
#这些优化的一部分)。
-dontoptimize
-不要翻转
#请注意,如果要启用优化,则不能
#在您自己的项目配置文件中包含优化标志;
#相反,您需要指向
#“proguard android optimize.txt”文件,而不是您的
#project.properties文件。
-keepattributes*注释*
-保持公共类com.google.vending.licensing.ILicensingService
-保持公共类com.android.vending.licensing.ILicensingService
#有关本机方法,请参见http://proguard.sourceforge.net/manual/examples.html#native
-KeepClassSwithMemberNames类*{
本地人;
}
#使setter保持在视图中
-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>(...);
}
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\proguard\lib
-dontwarn com.symbol.emdk.**
-dontwarn org.apache.http.**
-dontwarn com.appdynamics.eumagent.runtime.**
-keep public class android.support.v7.widget.** { *; }