Я знаю, как извлечь APK файлы классов с использованием системы на основе ниже окна:Как я могу программно декомпилировать файлы dex в Android?
Шаг 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 Decompiler по ссылке и извлечь его и старт (двойной щелчок) Jd-gui.exe
С JD-GUI окно просмотра созданного файла "classes.dex.dex2jar" в demofolder, это даст все файлы классов по имени src.
Теперь в меню Файл выберите пункт «сохранить все источники» это создаст почтовый файл с именем «classes_dex2jar.src.zip», состоящий из всех пакетов и файлов Java.
Извлеките этот zip-файл (classes_dex2jar.src.zip), и вы получите все java-файлы приложения.
Вышеуказанные шаги будут генерировать java-файлы, но для получения файлов xml выполните следующих шагов.
Шаг 3: Получение XML-файлы APK
Скачать apktool и apktool установить по ссылке и извлечь оба файлы и поместить его в ту же папку (например, «demoxmlfolder»).
Поместите .apk файл в той же папке (т.е. demoxmlfolder)
Теперь откройте командную строку и пройдите в папку, где хранится apktool (здесь «demoxmlfolder») и введите команду «apktool если каркасных разрешении .apk «Выше команда должна привести к« Установленной платформе ... »Теперь в командной строке введите команду« 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);
Для этого потребуется root, так как вы не можете читать другие ресурсы процесса/приложения, а тем более их двоичные файлы, как uid вашего собственного приложения. Только мои два цента. PD: будьте готовы переопределить пару классов, Java API Java не реплицирует полный набор API рабочего стола – Machinarius
@Machinarius, для этого потребуется только root для частных приложений. Проверьте https://play.google.com/store/apps/details?id=com.njlabs.showjava. Я работал над ним пару месяцев назад, но dex2jar работает на Android медленнее. –
Я был совершенно уверен, что модель безопасности Android не позволит вам делать это без использования root. Я стою исправлено. Хорошая работа по достижению этого, Поздравляю. Что касается повышения производительности ... Это потребует особо вмешательства с кодом dex2java, чтобы сделать его многопоточным и тому подобное. – Machinarius