4

proguard.cfgすべての Log.x() LogCat 出力をスケルチすることを目的とした次のセクションと同じものを使用して、同じアプリケーションの 2 つのバージョンがあります。

-assumenosideeffects class android.util.Log {
    public static *** v(...);
    public static *** i(...);
    public static *** d(...);
    public static *** w(...);
    public static *** e(...);
}

最初のバージョンはモノリシック (つまり、ライブラリ プロジェクトをまったく参照していない) でproguard.cfgあり、期待どおりに動作します。

2 番目のバージョンでは、2 つのライブラリ プロジェクトを使用しています (1 つは私のもので、もう 1 つは Google の LVL です)。同じproguard.cfgものがアプリケーション プロジェクトと私のライブラリ プロジェクトの両方に配置されます。ただし、その 2 番目のバージョンでは、proguard.cfgまったく効果がないようです。

これを説明できるものは何ですか?

4

3 に答える 3

2

アプリケーション プロジェクトに を追加proguard.config=proguard.cfgbuild.propertiesましたか? ProGuard のコンソール メッセージと出力ファイルが表示されます。最適化パスには、少なくとも「削除された命令の数」について言及する必要があります。

アプリケーション クラスとライブラリ クラスはすべて bin/classes にコンパイルされます。その後、これらはまったく同じように処理されます。これらは、bin/original.jar に結合され、proguard.cfg を使用して bin/obfuscated.jar に難読化されます。クラスを追加しても、ロギング コードの削除に実際に影響することはありません。

于 2011-06-26T23:27:26.847 に答える
1

このスイッチを使用して診断してください: -whyareyoukeeping

于 2011-06-26T05:34:13.110 に答える
0

アプリでのログ記録を無効にするために、これを使用しました。

-assumenosideeffects public class android.util.Log {
    <methods>;
}

それでも問題が解決しない場合は、他にいくつか試してみてください。

  1. コードプロガードの一部で例外をスローし、難読化する必要があります。スタックトレースが難読化されていない場合、proguard が適切に実行されていない可能性があります。
  2. プロガード ビルドを実行するときに、アプリでデバッグを有効にすることはできません。<application>マニフェストで、要素がに設定されていることを確認してくださいandroid:debuggable="false"
于 2011-06-29T17:55:54.040 に答える