web-dev-qa-db-ja.com

.dexファイルからすべてのクラスのリストを取得する方法はありますか?

.dexファイルがあり、それをclasses.dexと呼びます。

そのclasses.dexの内容を「読み取り」、その中のすべてのクラスのリストを、たとえばcom.mypackage.mysubpackage.MyClassを含む完全なクラス名として取得する方法はありますか?

com.Android.dx.dex.file.DexFile について考えていましたが、クラスのセット全体を取得する方法を見つけることができないようです。

46
ioreskovic

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クラスファイル)に格納される方法です。最初と最後の文字を削除し、/をに置き換えます。

13
JesusFreke

Android-SDKのコマンドラインツールdexdumpを使用します。入った $Android_HOME/build-tools/<some_version>/dexdump。必要以上に多くの情報が出力されます。 dexdumpをより冗長にする方法を見つけられませんでしたが、

dexdump classes.dex | grep 'Class descriptor'

動作するはずです。

101
jcsahnwaldt

dex2jar.dexに変換する.jar.ユーティリティを使用できます

http://code.google.com/p/dex2jar/

次に、その.jarファイルを抽出できます。

また、このフレームワークを使用できます

デデクサー

11
UVM

baksmaliには、baksmali v2.2以降でこれを行う機能があります。

baksmali list classes my.dexは、指定されたdexファイル内のすべてのクラスのリストを出力します。

3
JesusFreke