Xamarin Android Proguard-不支持的类版本号52.0
我试图在我的Xamarin.Android项目中使用Proguard,但编译失败,错误为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 是否有任何地方可以更精确
不支持的类版本号[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.** { *; }