4

project.properties の行のコメントを外して、proguard を有効にしました。

APK を逆コンパイルして、動作するかどうかを確認しました。すべてのメソッド、変数名、およびクラス名が a、b、c などに変更されていることがわかります。これは適切です。ただし、Activity クラスの名前は変更されていません。また、Log.d ステートメントは期待どおりに削除されませんでした。

誰かが逆コンパイルされたコードを読みにくくし、ログ ステートメントを削除するのを難しくするにはどうすればよいですか?

4

4 に答える 4

9

次の理由により、Android アプリケーションのライフサイクルに関連するさまざまなメソッドの名前を変更できません。

  • 継承; スーパークラス メソッドは Android ライブラリに含まれており、Proguard で名前を変更することはできません。したがって、名前onCreate()をに変更すると、注釈a()が原因でコンパイルの問題が発生します。@Override
  • アクティビティのライフサイクルで、Android は特定の名前を持つことが期待されるさまざまな関数を実行します (例:onCreate()onResume())。your のonCreate()名前が に変更された場合a()、スーパークラスの実装のみが実行され、あなたの実装は実行されません。

アクティビティのクラス名の名前を変更できない理由については、次のとおりです。

  • これは、マニフェストに変更を加えることを前提としていますが、これは Proguard ではサポートされていません。
  • これらの変更を自動的に行うと、望ましくない影響が生じる場合があります。たとえば、以前は に難読化されていたクラスが に難読化された場合、ユーザーのホーム画面からのショートカットは機能しなくなる可能A性がありますB

Proguard を使用して Log ステートメントを削除するのは、assumenosideeffectsオプションを使用するだけで非常に簡単です。詳細については、この関連する質問を参照してください

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}
于 2013-02-09T22:30:28.453 に答える
6

Paul Lammertsma は、質問の最初の部分に対して正確な回答を提供しました。2番目の部分について詳しく説明します。

ロギングを削除できるのは、最適化が無効になっていない場合のみです。これには、次のように別のグローバル コンフィギュレーション ファイルを指定する必要がありますproject.properties

  proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt

これらの設定はproguard-project.txt、すべてのログを削除します。

-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

ワイルドカードが多かれ少なかれ、さまざまな同等の形式があります。

同様の質問と回答:

于 2013-02-10T01:34:24.907 に答える
3

Logステートメントへのすべての参照を削除するには、proguard構成ファイルに次の行を追加する必要があります。

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

公式ウェブサイトでは、例を含む完全なマニュアルを見つけることができます。

于 2013-02-09T19:20:39.647 に答える
2

ログを削除するために、いくつかは StackOverflow からのさまざまな手法を使用して記事を書きました (記事には誰が作成者であるかが記載されています)。

http://bakingcode.com/development/ocultar-trazas-en-una-app-final-de-android/ IMHO Proguard を使用した 2 番目のものが最適だと思います。

コードを難読化するには、ニーズについて考える必要があります。http: //proguard.sourceforge.net/index.html#manual/examples.htmlで他の例を参照してください。

于 2013-02-09T20:28:00.880 に答える