Xamarin.AndroidプロジェクトでProguardを使用しようとしていますが、コンパイルはエラーUnsupported class version number [52.0] (maximum 51.0, Java 1.7)
で失敗します
私はそれらから 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:[/ライブラリ/Frameworks/Xamarin.Android.framework/Versions/7.0.0-18/lib/xbuild-frameworks/MonoAndroid/v7.0/mono.Android.jar]を読み取れません(できません'tプロセスクラス[Android/app/ActivityTracker.class](サポートされていないクラスバージョン番号[52.0](最大51.0、Java 1.7)))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) )proguard.ProGuard.execute(ProGuard.Java:78)at 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)at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.Java: 87)proguard.io.JarReader.read(JarReader.Java:65)at proguard .io.DirectoryPump.readFiles(DirectoryPump.Java:65)at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.Java:53)at proguard.InputReader.readInput(InputReader.Java:226)... 6 more原因:Java .lang.UnsupportedOperationException:proguard.classfile.io.ProgramClassReaderのproguard.classfile.util.ClassUtil.checkVersionNumbers(ClassUtil.Java:140)でサポートされていないクラスバージョン番号[52.0](最大51.0、Java 1.7) .visitProgramClass(ProgramClassReader.Java:88)at proguard.classfile.ProgramClass.accept(ProgramClass.Java:346)at proguard.io.ClassReader.read(ClassReader.Java:91)... 11 more
9警告1エラー
デフォルトのAndroid SDK proguard.jar
を、ここにある最新バージョンのProguardで更新する必要があります。
https://sourceforge.net/projects/proguard/files/
AndroidがAndroid-sdk\tools\proguard
で出荷するデフォルトバージョンの側面にインストールすることをお勧めします。既存のフォルダーを別の名前に変更し、proguard
の新しいバージョンを追加するだけです。
これは、Xamarin.Android 7.0リリースノートに記載されています。
https://developer.xamarin.com/releases/Android/xamarin.Android_7/xamarin.Android_7.0/
次のバグも記録されました:
https://bugzilla.xamarin.com/show_bug.cgi?id=44187
これは、Xamarin.Androidリポジトリのプルリクエストと調整されます。
ProguardがアプリからGoogle Play Servicesライブラリを削除するという問題がありました。
上記の @ 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.**
-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>(...);
}
シンプルアンサー
ドキュメントによると、proguardのバージョンを更新する必要があります( バージョン5 から開始し、Java 8をサポート)、jdk1.8を使用していることを確認してください
JDK 1.8-最大API 24+
JDK 1.7-API 23まで
JDK 1.6-API 20まで
更新方法パッケージコンソールからこのコマンドを書く
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に依存しているため)ツール->オプション-> xamarin-> JavaからJava 8をターゲットにし、ProGuardバージョンを更新してください。
回答の更新
ターゲットの場合、サポートライブラリのバージョンがターゲットバージョンと互換性があることを確認してください
Android 7(api 24)は、サポートライブラリが24であることを意味します
Android 7.1(api 25)は、サポートライブラリが25であることを意味します
すべてのサポートライブラリに加えて、Google Playサービスも使用している場合
Windows 10 x64およびVisual Studio 2015でも同じ問題に直面していました。VisualStudioツールのAndroid設定でJDKパスをJDK 1.8に設定しました->オプション-> xamarin-> Java開発キットロケーション。 「C:\ Program Files(x86)\ Java\jdk1.7.0_55」を指していたので、「C:\ Program Files\Java\jdk1.8.0_31」にしたので、問題は修正されました。
Visual Studioを使用
Visual Studio 2017または2019を使用している場合、これらのアプリケーションはプロガードをパックしていることに注意してください。 2019の場合、proguardバージョン:5.3.2。私にはバージョン6.0.3が必要だったので、次の場所でproguard.jarファイルのバックアップを作成しました。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android\proguard\lib
そして、sourceforgeサイトからZipから最新のものをコピーしました。