.dex
ファイルがあり、それをclasses.dex
と呼びます。
そのclasses.dex
の内容を「読み取り」、その中のすべてのクラスのリストを、たとえばcom.mypackage.mysubpackage.MyClass
を含む完全なクラス名として取得する方法はありますか?
com.Android.dx.dex.file.DexFile
について考えていましたが、クラスのセット全体を取得する方法を見つけることができないようです。
dexlib2ライブラリ をスタンドアロンライブラリとして使用して( mavenで利用可能 )、dexファイルを読み取り、クラスのリストを取得できます。
DexFile dexFile = DexFileFactory.loadDexFile("classes.dex", 19 /*api level*/);
for (ClassDef classDef: dexFile.getClasses()) {
System.out.println(classDef.getType());
}
クラス名は「Ljava/lang/String;」という形式になることに注意してください。これは、dexファイル(およびJavaクラスファイル)に格納される方法です。最初と最後の文字を削除し、/をに置き換えます。
Android-SDKのコマンドラインツールdexdump
を使用します。入った $Android_HOME/build-tools/<some_version>/dexdump
。必要以上に多くの情報が出力されます。 dexdump
をより冗長にする方法を見つけられませんでしたが、
dexdump classes.dex | grep 'Class descriptor'
動作するはずです。
dex2jar
を.dex
に変換する.jar.
ユーティリティを使用できます
http://code.google.com/p/dex2jar/
次に、その.jar
ファイルを抽出できます。
また、このフレームワークを使用できます
baksmaliには、baksmali v2.2以降でこれを行う機能があります。
baksmali list classes my.dex
は、指定されたdexファイル内のすべてのクラスのリストを出力します。