Есть ли способ получить исходный код из файла APK?
жесткий диск на моем ноутбуке просто разбился, и я потерял весь исходный код приложения, над которым я работал в течение последних двух месяцев. У меня есть только APK файл, который хранится в моей электронной почте, когда я отправил его другу.
есть ли способ, чтобы извлечь исходный код из этого файла APK?
16 ответов
простой способ: используйте онлайн-инструмент http://www.javadecompilers.com/apk, загрузить apk и получить исходный код.
процедура декодирования .файлы apk, пошаговый метод:
Шаг 1:
создайте новую папку и скопируйте ее.файл apk, который вы хотите декодировать.
теперь переименуйте расширение этого .apk файл .zip (например, переименовать из filename.apk для имени файла.ZIP) и сохраните его. Теперь вы можете доступ к классам.DeX файлы и т. д. На этом этапе вы можете видеть drawables, но не xml и java-файлы, поэтому продолжайте.
Шаг 2:
теперь этот экстракт .zip-файл в той же папке (или новой папке).
скачать dex2jar и извлечь его в ту же папку (или новую папку).
ход занятия.dex файл на dex2jar папка.
теперь откройте командную строку и измените каталог на эту папку (или новую папку). Тогда пиши
d2j-dex2jar classes.dex
(для Mac terminal или ubuntu напишите./d2j-dex2jar.sh classes.dex
) и нажмите enter. Теперь у тебя есть занятия.Декс.dex2jar файл в той же папке.скачать Java decompiler, дважды щелкните по jd-gui, нажмите "Открыть файл" и откройте классы.Декс.dex2jar файл из этой папки: теперь вы получаете файлы классов.
сохранить все эти файлы классов (в JD-gui нажмите Файл - > Сохранить все источники) по имени src. На этом этапе вы получаете источник java, но .xml-файлы по-прежнему не читаются, поэтому продолжайте.
Шаг 3:
теперь откройте другую новую папку
положить в .apk файл, который вы хотите декодировать
скачать последнюю версию apktool и окно установки apktool (оба могут быть скачано по той же ссылке) и поместите их в ту же папку
откройте командное окно
Теперь запустите команду
apktool if framework-res.apk
и далееapktool d myApp.apk
(где myApp.apk обозначает имя файла, которое вы хотите декодировать)
теперь вы получаете папку с файлами в этой папке и можете легко читать xml-файлы apk.
Шаг 4:
это не какой-либо шаг, просто скопируйте содержимое обеих папок (в данном случае обеих новых папок)в одну
и наслаждайтесь исходным кодом...
это альтернативное описание-на всякий случай, если кто-то застрял с описанием выше. Выполните следующие действия:
- скачать
apktool.bat
(илиapktool
для Linux) иapktool_<version>.jar
от http://ibotpeaches.github.io/Apktool/install/ - переименуйте файл jar сверху в
apktool.jar
и поместите оба файла в одну папку - откройте окно dos (
cmd.exe
) и перейдите в эту папку; убедитесь, что установлена среда Java (для Linux также проверьте заметки о необходимых библиотеках) - начало:
apktool decode [apk file]
промежуточный результат: файлы ресурсов,
AndroidManifest.xml
- распакуйте файл APK с помощью распаковщика по вашему выбору
промежуточный результат:
classes.dex
- скачать и извлечь
dex2jar-0.0.9.15.zip
от http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q= - перетащить
classes.dex
наdex2jar.bat
(или введите<path_to>\dex2jar.bat classes.dex
в коробке DOS; для Linux используйтеdex2jar.sh
)промежуточный результат:
classes_dex2jar.jar
- распакуйте
classes_dex2jar.jar
(может быть необязательным в зависимости от используемого декомпилятор) - декомпилируйте файлы классов (например, с помощью JD-GUI или DJ Декомпилятор)
результат исходный код
Примечание: не разрешается декомпилировать пакеты сторонних производителей; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, результирующий код, скорее всего, будет запутан
пока вы можете декомпилировать свой APK
файл, вы, вероятно, нажмете одну большую проблему:
он не собирается возвращать код, который ты написал. Вместо этого он будет возвращать все, что компилятор встроил, с переменными, заданными случайными именами, а также функциями, заданными случайными именами. Это может занять значительно больше времени, чтобы попытаться декомпилировать и восстановить его в код, который у вас был, чем начать все сначала.
к сожалению, такие вещи убил много проекты.
В будущем я настоятельно рекомендую изучить систему управления версиями, например CVS, SVN и git etc.
и как это сделать.
существует также новое приложение на Play Store С помощью которого можно декомпилировать apk (системные приложения тоже) и просмотреть исходный код прямо на вашем смартфоне. Она сохраняет файлы на SD карту, так что вы можете просмотреть его на вашем компьютере. Для этого не Требуется root или что-то еще.
просто установите и получайте удовольствие. Я думаю, что это самый простой способ декомпилировать приложение.
apktool это лучшее, что вы можете попробовать. Я сохранил с ним xml, но, честно говоря, я не знаю, как он будет работать с ним .Java-код.
Я бы рекомендовал вам иметь репозиторий кода, даже если вы единственный кодер. Я использовал Проект Locker для моих собственных проектов. Это дает вам бесплатный SVN и Git РЕПО.
эти две статьи описывают, как сочетать использование apktool
и dex2jar
взять APK
файл и создать проект Eclipse, который может создавать и запускать его.
http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html
http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html
в основном вы:
- использовать
apktool
to получить файлы ресурсов из apk - использовать
dex2jar
чтобы получить файл jar, содержащий классы в формате, который понравится Eclipse. - создать проект Eclipse укажите его на файлы ресурсов и новый файл jar
- откройте файл jar с помощью утилиты zip и удалите существующие ресурсы
- откройте файл jar с помощью
JDGui
для просмотра исходного кода - Возьмите любой исходный код, который вам нужен от
JDGui
, вставьте его в класс внутри Eclipse и изменить его - удалите этот класс из файла jar (так что у вас нет одного и того же класса, определенного несколько раз)
- запустить его.
apktool будет работать. Вам даже не нужно знать хранилище ключей для извлечения исходного кода (что немного страшно). Основным недостатком является то, что источник представлен в формате Smali вместо Java. Другие файлы, такие как значок и основной.xml проходит отлично, хотя и может стоить вашего времени, чтобы по крайней мере восстановить их. В конечном счете, вам, скорее всего, придется переписать свой Java-код с нуля.
вы можете найти apktool здесь. Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-Zip, чтобы распаковать их.
есть несколько способов сделать это:
-
используйте функцию "профиль или отладка APK" в Android Studio 3.0.
Это позволяет открывать и исследовать APKs в Android Studio. Занятия декомпиляция в smali. Ресурсы не извлекаются, и такие вещи, как" перейти к определению"," найти все ссылки " и отладка не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smalidea.
-
использовать jadx.
Jadx декомпилирует код в данном APK в исходные файлы java.
-
использовать apktool.
Apktool-это инструмент командной строки, который извлекает ресурсы и декомпилирует код в smali для данного apk. Вы также можете перекомпилировать с помощью apktool. Вот пример этого в действии:
$ apktool d test.apk I: Using Apktool 2.2.4 on test.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: 1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files... $ apktool b test I: Using Apktool 2.2.4 on test I: Checking whether sources has changed... I: Smaling smali folder into classes.dex... I: Checking whether resources has changed... I: Building resources... I: Building apk file... I: Copying unknown files/dir...
может быть легко увидеть источник:
в Android studio 2.3,Build -> Analyze APK -> Select the apk that you want to decompile
.
Вы увидите, что это исходный код.
Linf для reference:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2
Я покажу вам другой способ декомпилировать .apk файлы.
вы можете выполнить первые 2 шага от "prankul Гарг". Так что у вас есть еще одна возможность:
Шаг 3':
скачать "JD-GUI", это легко найти. Открой свой .Джар файл в " JD-gui.исполняемый." (Файл > Открыть файл > ' нашел свой .Джар "файл"). После этой процедуры можно сохранить все ресурсы в .zip.
и
1st-вы должны переименовать .apk до .zip
2nd-вы должны декодировать .Декс!--2-- > файл (если хотите, расшифруйте .apk до dex2jar, это возможно)
3rd-вы должны декодировать .Джар С JD-GUI
ниже онлайн:
http://www.javadecompilers.com/apk
это сделать все одним щелчком мыши: decompiled .java файлы + ресурсы + xml (в одном .zip-файл) с очень хорошим декомпилятором (Jadx возвращает java-код в местах/функциях, где другие компиляторы возвращают комментарии внутри функции, такие как "невозможно декомпилировать" или некоторый ассемблер/машинный код android)
Apktool по инженерный 3-й партии, закрытые, бинарные приложения для Android.
Он может декодировать ресурсы почти в исходную форму и перестраивать их после внесения некоторых изменений.
Это позволяет отлаживать код smali шаг за шагом. Также это упрощает работу с приложением из-за проектной файловой структуры и автоматизации некоторых повторяющихся задач, таких как построение apk, так далее.
этот сайт https://www.apkdecompilers.com/ сделал это автоматически.
сначала я попробовал сайт, упомянутый в принятом ответе, но это не сработало для меня.
Я лично рекомендую Показать Java Android App чтобы получить исходный код. Вы можете скачать его из play store или из здесь
apktool - это путь. Онлайн-сервис apktool также существует:http://www.javadecompilers.com/apktool
некоторые ограничения, очевидно, существуют из-за сервиса "online nature": вы можете извлекать и исследовать активы и файл манифеста, но на данный момент невозможно перекомпилировать приложение.
тем не менее, это без проблем способ "открыть" приложение для android.
вы можете попробовать DexPatcher. Он даже интегрируется с Android Studio. Он использует Apktool и Dex2Jar внутренне.
Вы также можете использовать эти инструменты независимо.
Apktool декомпилирует apk и извлекает .файлы dex, которые могут быть преобразованы в jar с помощью Dex2Jar. Банку можно декомпилировать с помощью JD-GUI. Вы можете увидеть код Java с помощью этого инструмента. Хотя сходство декомпилированного кода с фактический код не может быть гарантирована. Есть некоторые продвинутые обфускации кода инструменты, доступные на рынке, которые испортят код, чтобы затруднить декомпиляцию / понимание. например. Должны быть