Есть ли способ получить список всех классов из файла .dex?
У меня есть файл .dex
, назовите его classes.dex
.
Есть ли способ "прочитать" содержимое этого classes.dex
и получить список всех классов в нем как полные имена классов, включая их пакет, com.mypackage.mysubpackage.MyClass
, для exmaple?
Я думал о com.android.dx.dex.file.DexFile
, но я не могу найти способ для извлечения всего набора классов.
Ответы
Ответ 1
Вы можете использовать библиотеку 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). Чтобы преобразовать, просто удалите первую и последнюю букву и замените/с.
Ответ 2
Используйте инструмент командной строки dexdump
из Android-SDK. Это в $ANDROID_HOME/build-tools/<some_version>/dexdump
. Он печатает гораздо больше информации, чем вы, вероятно, захотите. Я не нашел способ сделать dexdump
менее подробным, но
dexdump classes.dex | grep 'Class descriptor'
должен работать.
Ответ 3
Вы можете использовать утилиту dex2jar
, которая преобразует .dex
в .jar.
http://code.google.com/p/dex2jar/
Затем вы можете извлечь этот файл .jar
.
Кроме того, вы можете использовать эту инфраструктуру
Dedexer
Ответ 4
baksmali имеет функциональность для этого, начиная с baksmali v2.2.
baksmali list classes my.dex
напечатает список всех классов в данном файле dex.