1

アプリケーションで Proguard を使用しています。ビルドをエクスポートした後、dex2jar を使用してリバース エンジニアリングを実行しましたが、一部の Java クラス名はまだ読み取り可能な形式ですが、メソッド名は難読化されています。たとえば、難読化後に難読化する前に TestClass.java という名前のクラスがある場合、a.java または b.java のようなものを期待します...

しかし、私のプロジェクトのアクティビティ クラスでは TestClass.java として表示されます。

Activity クラス名が読み取り可能な形式であるという私が間違っている場所を知っている人はいますか?

前もって感謝します!

4

2 に答える 2

0

\sdk\tools\proguard\proguar-android ファイルでは、-keep public class * extends android.app.Activity のように記述されているため、proguard の実行時にこれらのクラスが CustomNames を保持することを意味します。そうしないと、プログラムはあなたのクラスを見つけることができません

于 2015-02-17T08:33:18.613 に答える
0

ProGuard は Android ビルド システムに統合されているため、手動で呼び出す必要はありません。ProGuard は、アプリケーションをリリース モードでビルドする場合にのみ実行されるため、アプリケーションをデバッグ モードでビルドするときに、難読化されたコードを処理する必要はありません。ProGuard の実行は完全にオプションですが、強くお勧めします。

ant release を実行するか、Eclipse で Export Wizard を使用して、リリース モードでアプリケーションをビルドすると、ビルド システムは proguard.config プロパティが設定されているかどうかを自動的にチェックします。そうである場合、ProGuard はアプリケーションのバイトコードを自動的に処理してから、すべてを .apk ファイルにパッケージ化します。デバッグ モードでビルドすると、デバッグがより面倒になるため、ProGuard は呼び出されません

http://developer.android.com/tools/help/proguard.html .

上記の引用はドキュメントからのものです。アプリケーションはリリース モードですか?

http://developer.android.com/tools/publishing/app-signing.html#releasemode

編集:

難読化とは

デフォルトでは、コンパイルされたバイトコードには、ソースファイル名、行番号、フィールド名、メソッド名、引数名、変数名など、多くのデバッグ情報が含まれています。この情報により、バイトコードの逆コンパイルとプログラム全体のリバースエンジニアリングが簡単になります。場合によっては、これは望ましくありません。ProGuard などの難読化ツールは、デバッグ情報を削除し、すべての名前を意味のない文字シーケンスに置き換えることができるため、コードのリバース エンジニアリングがはるかに困難になります。おまけとしてコードをさらにコンパクトにします。プログラムは、例外スタック トレースで指定されたクラス名、メソッド名、および行番号を除いて、機能的に同等のままです。

于 2013-04-12T12:00:08.037 に答える