web-dev-qa-db-ja.com

proguard警告:構成はエントリポイントを保持しますが、記述子クラスは保持しません

私が設定しました:

-keep ,allowoptimization,allowobfuscation,allowshrinking public class     org.jf.dexlib2.dexbacked.** {
    *;
}

それでも警告が表示されます:

 Note: the configuration keeps the entry point 'com.trusteer.trf.dex_parser { int get_strings_count(org.jf.dexlib2.dexbacked.DexBackedDexFile); }', but not the descriptor class 'org.jf.dexlib2.dexbacked.DexBackedDexFile'

私はproguardバージョン4.7を使用しています(Android SDK)

私は何をすべきか?

28
user3398598

特定のメソッドvoid foo(Bar bar);を保持するが、記述子クラスBarを難読化するようにProguardに指示しました。

これは、難読化によって署名が変更されるため、外部ソースからメソッドを呼び出す場合にのみ問題になります(Proguardを使用してライブラリを難読化し、そのライブラリを別のアプリで使用する場合)。

次の選択肢があります。

  • Barも保持するようにProguardを構成します。

  • 使用 -dontnoteこのようなメモを印刷しないようにProguardに指示するディレクティブ。

31
William

注:構成は、エントリポイント「...」を保持しますが、記述子クラス「...」は保持しませんこれは、メソッドの記述子の引数型または戻り値型です。その後、クラスを保持することもできます。そうでない場合、ProGuardは名前を難読化し、メソッドの署名を変更します。その場合、メソッドはエントリポイントとして見つけることができなくなる可能性があります。パブリックAPIの一部である場合。 -keepオプション修飾子includeescriptorclasses(-keep、includedescriptorclasses ...)を使用すると、このような記述子クラスを自動的に保持できます。 -dontnoteオプションを指定すると、これらのメモをオフにできます。

3
柏渊谢

この問題を修正するには、「proguard-rules.pro」ファイルにこの行を追加します。

-ignorewarnings
2
Sanche

docuemnts から:

allowhrinking -keepオプションで指定されたエントリポイントは、別の方法で保存する必要がある場合でも、縮小できることを指定します。つまり、エントリポイントは縮小ステップで削除される場合がありますが、結局必要な場合は、最適化または難読化されない場合があります

したがって、allowshrinking修飾子を削除する必要があるようです。

0
Vaiden

私の場合、build.gradleに追加するとこの問題が発生します

minifyEnable true

公式の指示: https://flutter.dev/docs/deployment/Android

バグ https://github.com/flutter/flutter/issues/1925

サンプルproguard-rules.proファイル:

#Flutter Wrapper
-ignorewarnings
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
0
burtsevyg