web-dev-qa-db-ja.com

Xamarin.Android Proguard-サポートされていないクラスバージョン番号52.0

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エラー

44
Eino Gourdin

デフォルトの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リポジトリのプルリクエストと調整されます。

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

110
Jon Douglas

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.**

完全な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>(...);
}
4
Brandon Minnick

シンプルアンサー

ドキュメントによると、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サービスも使用している場合

3
Mina Fawzy

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」にしたので、問題は修正されました。

1
Haider Minto

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から最新のものをコピーしました。

0
Jahmic