Подтвердить что ты не робот

Есть ли способ получить список всех классов из файла .dex?

У меня есть файл .dex, назовите его classes.dex.

Есть ли способ "прочитать" содержимое этого classes.dex и получить список всех классов в нем как полные имена классов, включая их пакет, com.mypackage.mysubpackage.MyClass, для exmaple?

Я думал о com.android.dx.dex.file.DexFile, но я не могу найти способ для извлечения всего набора классов.

4b9b3361

Ответ 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.