最近Android studioをアップグレードしましたが、Android studio 3.1で報告された次の問題の原因を見つけることができません。
Warning: The rule `-keep public class *extends Java.lang.annotation.Annotation {
警告はおそらく切断され、情報が欠落しているようです。デバッグバリアントをビルドするときにこの警告が表示されますが、プロガードの問題のように見えます。プロガードファイルをチェックしましたが、正確に一致する行がありません。プロジェクト全体を検索しました。根本原因に関するアイデアはありますか?
@ arcone1、@ Vincent Mattanaによる質問のコメントで言及され、@ randomによって確認されたように、この問題はAndroid Studio 3.2で解決されています。
明確にするため、これはR8からのエラーではなく警告であり、従来のmultidexバリアントでメインdexのクラスのリストを計算するために使用します。出力には影響せず、ビルドやランタイムのエラーを引き起こすことはありません。
この保持規則を「-keep public class * implements Java.lang.annotation.Annotation」に変更する修正に取り組んでいます。これは意味的には同じであり、警告を削除します。
ですから、今のところそれを無視するか、または CanaryでEdgeを出血させてください (あなた自身のリスクで踏んでください)。
UPDATE: .2は出ています !
ワイルドカード*
とキーワードextends
の間にスペースがありません。警告自体はおそらくProGuardからではなく、Googleの組み込みシュリンクから発生します。
プロジェクトで見つからない場合は、依存するaarファイルに含まれているコンシューマーProguardファイルのルールが壊れている可能性があります。
Gradle defaultConfigの "multiDexEnabled true"設定により、同じ問題が発生しました。
Multidex依存関係 "implementation 'com.Android.support:multidex:1.0.3'"を追加して、この問題を解決しました
Android {
defaultConfig {
...
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.Android.support:multidex:1.0.3'
}
アプリのビルドgradle defaultConfigから「multiDexEnabled true」を削除すると、警告は消えます。
defaultConfig {
...
//multiDexEnabled true
}
dexOptions {
javaMaxHeapSize "Xg"
}
幸運を)
クラスAndroid.support.annotation.Keep
は私が使用するものです(Android Studio 3.1.2
)...
-keep @interface Android.support.annotation.Keep
-keep @Android.support.annotation.Keep class *
-keepclasseswithmembers class * {
@Android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@Android.support.annotation.Keep <methods>;
}
保持する注釈を制御するフラグがさらにあります。
-keepattributes RuntimeVisibleAnnotations
-keepattributes AnnotationDefault
-keepattributes *Annotation*
ターミナルタブで./gradlew assembleRelease
を実行すると、生の出力を取得できます。
プロジェクトのProGuard構成でAnnotation
を参照していない場合、この警告は参照されたライブラリの「消費者」ルールに由来し、ビルド時に難読化される可能性があります。
したがって、それは無害な警告であるように見えるため、ミュートすることができます。
-dontwarn Java.lang.annotation.Annotation
使用実装 'com.Android.support:support-annotations:27.1.1'アプリの依存関係
アプリの互換バージョンに応じてバージョンを選択
私の場合、Gradleバージョンを変更した後に警告が表示されました。キャッシュを無効にしてAndroid Studioを再起動すると、警告は消えました。
メニューから:[ファイル]> [キャッシュの無効化と再起動]
私のgradleバージョンは、com.Android.tools.build:gradle:3.3.2にアップグレードした問題であり、エラーは消えました。
Gradleバージョン:.1.4
MultiDex:有効
私の場合、いくつかの文字列リソースの翻訳を追加するのを忘れていました。追加後にエラー/警告なし。
この問題は、Google Playストアに新しいアップグレードバージョンをアップロードし、アップロード後にほとんどのユーザーが[保持]をクリックしてから送信するときに発生します。 [そのまま保持して送信]をクリックしないでください。 apkファイルは正常にアップロードされ、Retain fileは自動的に破棄され、非アクティブ化モードに設定されます。
要確認:古いバージョンとは異なる新しい更新のすべての詳細を必ず入力してください。