Как я могу программно декомпилировать файлы dex в Android?

Я знаю, как извлекать файлы apk в классы, используя систему на базе Windows, как показано ниже:

Шаг 1. Переименование файла .apk.

Переименуйте файл .apk с расширением .zip (например, пусть файл будет «demofile.apk», а после переименования он станет «demofile.apk.zip»)

Шаг 2: Получение java-файлов из apk

Теперь извлеките переименованный zip-файл в определенную папку, например, пусть эта папка будет «demofolder». Теперь загрузите dex2jar из ссылки для Windows и извлеките этот zip-файл в папку «demofolder».

Теперь откройте командную строку и перейдите в папку, созданную на предыдущем шаге, и введите команду «dex2jar classes.dex» и нажмите enter.This будет генерировать файл «classes.dex.dex2jar» в той же папке.

Загрузите java-декомпилятор из ссылки и извлеките его и запустите (дважды щелкните) jd-gui.exe

Из окна jd-gui просмотрите сгенерированный файл «classes.dex.dex2jar» в demofolder, это даст все файлы классов по имени src.

Теперь из меню «Файл» выберите «сохранить все источники», это приведет к созданию zip-файла с именем «classes_dex2jar.src.zip», состоящего из всех пакетов и java-файлов.

Извлеките этот zip-файл (classes_dex2jar.src.zip), и вы получите все java-файлы приложения.

Вышеуказанные шаги будут генерировать java-файлы, но для получения файлов xml выполните следующие шаги.

Шаг 3: Получение xml-файлов из apk

Загрузите apktool и apktool, установив из ссылки и извлеките оба файла и поместите их в одну папку (например, «demoxmlfolder»).

Поместите файл .apk в ту же папку (то есть demoxmlfolder)

Теперь откройте командную строку и перейдите в каталог, где хранится apktool (здесь «demoxmlfolder») и введите команду «apktool if framework-res.apk». Команда «Above» должна привести к «Framework installed …». Теперь в командной строке введите команду «Apktool d filename.apk» (где filename – имя файла apk). Это создаст папку имени имени файла в текущем каталоге (здесь demoxmlfolder), где все файлы xml будут сохранены в папке res \ layout.

Но я хотел бы знать, как это сделать программно в Android . Поэтому мое приложение для Android может просто извлечь файл dex другого приложения. Я не против, если файл dex будет скопирован в другом месте на телефоне, а затем декомпилирован (это просто декомпиляция, в которую я застрял)

Следуя приведенному ниже принципу, у меня есть доступ к каждому окну приложения , а не к тому, как декомпилировать его в Android.

Любая помощь будет фантастической.

final PackageManager pm = getPackageManager(); PackageInfo packageInfo = null; try { packageInfo = pm.getPackageInfo("PACKAGE NAME HERE", PackageManager.GET_META_DATA); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } File file = new File(packageInfo.applicationInfo.sourceDir); Uri uri = Uri.fromFile(file); 

Solutions Collecting From Web of "Как я могу программно декомпилировать файлы dex в Android?"

Здесь вы можете просмотреть исходный код приложения ShowJava. Похоже, он использует инструмент Dex2Jar. Декомпиляция начинается в BackgroundService, и всякая магия происходит в некоторых специальных классах Jar. Я не знаю, появился ли этот код из библиотеки или если весь этот код создан им. Посмотрите на метод ExtractJar и DecompileJar, чем не должно быть трудно понять, что происходит.

Вам нужно выполнить несколько шагов, чтобы заставить его работать:

  1. Попал на сайт bitbucket dex2jar и загрузил файлы. Добавьте файлы jar в свой проект.
  2. Через DexFileFactory вы можете загрузить apk, преобразовать его в dex ( loadDexFile ) и сохранить его в файл ( writeDexFile ).
  3. С другой библиотекой, которая преобразует банки в java-файлы, вы можете, наконец, прочитать содержимое. Я нашел Procyon , который кажется очень простым. Загрузите файл класса с помощью InputTypeLoader а затем вызовите Decompiler.decompile() .

Конечно, вы можете использовать другие библиотеки на шаге 3, но для шага 1 и 2 я не нашел альтернатив.