Есть ли способ получить исходный код из файла APK?
жесткий диск на моем ноутбуке просто разбился, и я потерял весь исходный код для приложения, над которым я работал в течение последних двух месяцев. У меня есть только APK файл, который хранится в моей электронной почте, когда я отправил его другу.
есть ли способ, чтобы извлечь исходный код из этого файла APK?
16 ответов:
простой способ: используйте онлайн-инструмент http://www.javadecompilers.com/apk, загрузите apk и получите исходный код.
процедура декодирования .apk файлы, шаг за шагом метод:
Шаг 1:
создайте новую папку и скопируйте ее.APK файл, который вы хотите расшифровать.
теперь переименуйте расширение этого .APK файл для .zip (например, переименовать из имени файла.apk к имени файла.zip) и сохранить его. Теперь вы можете доступ к классам.DeX файлы и т. д. На этом этапе вы можете видеть чертежи, но не файлы xml и java, поэтому продолжайте.
Шаг 2:
теперь этот экстракт .zip-файл в той же папке (или новой папке).
скачать dex2jar и извлечь его в ту же папку (или новую папку).
ход занятия.dex файл на dex2jar папка.
теперь откройте командную строку и измените каталог на эту папку (или новую папку). Тогда пиши
d2j-dex2jar classes.dex
(для Mac terminal или ubuntu write./d2j-dex2jar.sh classes.dex
) и нажмите enter. Теперь у вас есть классы.Декс.файл dex2jar в той же папке.скачать Java декомпилятор, дважды щелкните на 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 карту, так что вы можете просмотреть его на вашем компьютере. Он не требует корня или чего-то еще.
просто установите и получайте удовольствие. Я думаю, что это самый простой способ декомпилировать приложение.
apktool это лучшее, что вы можете попробовать. Я сохранил некоторые xml с ним, но, честно говоря, я не знаю, как это будет работать с ним .Java-код.
Я бы рекомендовал вам иметь репозиторий кода, даже если ваш единственный кодер. Я использую Project Locker для моих собственных проектов. Это дает вам бесплатный SVN и Git РЕПО.
эти две статьи описывают, как сочетать использование
apktool
иdex2jar
взять и создать проект 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 будет работать. Вам даже не нужно знать keystore, чтобы извлечь исходный код (что немного пугает). Основным недостатком является то, что источник представлен в формате 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.исполняемый." (Файл > Открыть файл > своего .банку file'). После этой процедуры, вы можете сохранить все ресурсы .молнии.
и
1-й - вы должны переименовать .apk до .молнии
2-й - вы должны расшифровать .Декс файл (если вы хотите, декодировать .apk до dex2jar, это возможно)
3-й - вы должны декодировать .банку С JD-GUI
ниже онлайн:
http://www.javadecompilers.com/apk
Он делает все одним щелчком мыши: декомпилированный .java файлы + ресурсы + xml (в одном .zip-файл) с очень хорошим декомпилятором (jadx возвращает java-код в местах / функциях, где другие компиляторы возвращают комментарии внутри функции, такие как" невозможно декомпилировать " или некоторый ассемблер android/машинный код)
Apktool для обратного инжиниринга сторонних, закрытых, бинарных приложений для 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 с помощью этого инструмента. Хотя сходство декомпилированного кода с фактический код не может быть гарантирована. Есть некоторые продвинутые обфускации кода инструменты, доступные на рынке, которые портят код, чтобы затруднить декомпиляцию / понимание. например. Должны быть