2016-09-15 52 views
38

我想在我的Xamarin.Android项目中使用Proguard的,但编译失败与Unsupported class version number [52.0] (maximum 51.0, Java 1.7)Xamarin.Android Proguard的 - 不支持的类版本号52.0

我从那些twoquestions看到,这可能是一个错误Java 7和Java 8之间的不匹配,更准确地说某些版本的proguard不支持Java 8.但是,在Xamarin首选项 - > SDK位置中,Java SDK指向JDK 7:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home

是否有任何可以使用proguard的地方更精确地配置?任何其他想法?

这里的故障日志:

产生java.io.IOException:无法读取 [/Library/Frameworks/Xamarin.Android.framework/Versions/7.0.0-18/lib/xbuild-框架/ MonoAndroid/v7.0/mono.android.jar] (无法处理类[android/app/ActivityTracker.class](不支持 类版本号[52.0](最大51.0,Java 1.7)))at proguard.InputReader.readInput(InputReader.java:230)at proguard.InputReader.readInput(InputReader.java:200)at proguard.InputReader.readInput(InputReader.java:178)at proguard.InputReader.execute(InputReader.java:78)at proguard.ProGuard.readInput(ProGuard.java:196)at proguard.ProGuard.execute(ProGuard.java:78)at proguard.ProGuard.main(ProGuard。 java:492)原因: java.io.IOException:无法在 proguard中处理类 [android/app/ActivityTracker.class](不支持的类版本号 [52.0](最大值51.0,Java 1.7))。 io.ClassReader.read(ClassReader.java:112)at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87) at proguard.io.JarReader.read(JarReader.java:65)at proguard.io。 DirectoryPump.readFiles(DirectoryPump.java:65)at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPum如果您的系统已经安装了更新版本,您可以使用下面的代码生成一个新的版本号:5235(最大值为51.0,Java 1.7)在 proguard.classfile.util.ClassUtil.checkVersionNumbers(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警告(S)1个错误(S)

回答

96

您需要更新默认的Android SDK proguard.jar使用ProGuard的最新版本在这里找到:

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

我建议你在android-sdk\tools\proguard重要的是Android的船舶默认版本的一侧安装此。只需将现有文件夹重命名为其他内容并添加新版本proguard即可。

这是在Xamarin.Android 7中列出的。0版本说明:

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

在其下面的bug已被记录,以及:

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

这是协调与拉入请求在Xamarin.Android库:

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

+2

这适用于我,详情我用'lib'文件夹替换Android'tools/proguard/lib'文件夹Sourceforge发布的最新版Proguard(目前为5.​​3.2)。 –

+7

如果您替换整个proguard目录,请确保从旧目录复制配置文件:proguard-android-optimize.txt,proguard-android.txt,proguard-project.txt。 – rooby

+0

最奇妙的事情是,它甚至2年前真的有帮助) Thx男人,你救了我的一天。 – Darkmike

1

我当时也面临同样的问题Windows 10 x64和visual studio 2015.我已经将JDK路径设置为在Visual Studio 工具 - >选项 - > xamarin - > java开发工具包位置的android设置下的JDK 1.8。它指向“C:\ Program Files文件(x86)\ Java \ jdk1.7.0_55”,并将其设置为“C:\ Program Files \ Java \ jdk1.8.0_31”,并且问题已得到解决。

+0

修改路径是否解决了这个问题? –

+0

不,它不适用于我,无论我在VS/Xamarin Studio中使用Java 7还是Java 8,我都会得到相同的错误。 –

+0

如果使用** ProGuard或Multi-Dex **,那么**不会修复**问题,因为那些依赖于android sdk/tools/proguard中的工具,正如Jon Douglas所述。另一方面,它**应该为任何人解决**不使用ProGuard或Multi-Dex **的问题,如果他们在尝试使用Nougat [API 24]时遇到此错误,或者某些软件包/库取决于API 24功能。 – ToolmakerSteve

2

简单的答案

根据文档需要更新的ProGuard版本(从version 5启动它支持Java 8),并确保您使用jdk1.8

JDK 1.8 - 高达24+ API

JDK 1.7 - 高达23 API

JDK 1.6 - 高达20 API

如何更新从包控制台写这个命令

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

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

或手动下载proguard与当前版本

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

详细答案如果启用目标android Nogut并启用Multi-Dex或ProGuard,则需要使用适当的ProGuard版本(因为ToolMakerSteve表示他们依赖于ProGuard)因此请确保从工具中指定java 8 - > options - > xamarin - > Java和更新的ProGuard版本

更新应答

使与目标的版本确保您的支持库版本不兼容,如果你的目标

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

的Android 7.1(API 25)的意思是你的支持库,你应该使用谷歌播放服务,以及

1

我有哪里Proguard的被移除谷歌的一个问题是25

所有支持库,如果从我的应用中播放服务库。

除了以下@Jon Douglas“回答上面,我不得不文本以下行添加到该文件夹​​中找到的proguard-android.txt文件:

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

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

完整的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 
-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>(...); 
} 
相关问题