2016-09-15 70 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>(...); 
} 
相關問題