Жесткий диск на моем ноутбуке просто разбился, и я потерял весь исходный код приложения, над которым я работал последние два месяца. Все, что у меня есть, это файл APK, который хранится в моем письме, когда я отправил его другу.
Есть ли способ извлечь исходный код из этого файла APK?
Простой способ: использовать онлайн-инструмент http://www.javadecompilers.com/apk, загрузить apk и получить исходный код.
Процедура для декодирования файлов .apk, шаг за шагом:
Создайте новую папку и скопируйте файл .apk, который вы хотите декодировать.
Теперь переименуйте расширение этого файла .apk в .zip(например, переименуйте из filename.apk в filename.zip) и сохраните его. Теперь вы можете получить доступ к файлам classes.dex и т.д. На этом этапе вы можете видеть чертежи, но не файлы xml и java, поэтому продолжайте.
Теперь извлеките этот .zip файл в ту же папку (или NEW FOLDER).
Загрузите dex2jar и извлеките его в ту же папку (или NEW FOLDER).
Переместите файл classes.dex в папку dex2jar.
Теперь откройте командную строку и смените каталог на эту папку (или NEW FOLDER). Затем напишите d2j-dex2jar classes.dex
(для терминала mac или ubuntu write ./d2j-dex2jar.sh classes.dex
) и нажмите enter. Теперь у вас есть файл classes.dex.dex2jar в той же папке.
Загрузите java decompiler, дважды щелкните по jd-gui, щелкните по открытому файлу и откройте файл classes.dex.dex2jar из эта папка: теперь вы получаете файлы классов.
Сохраните все эти файлы классов (в jd-gui, щелкните File → Save All Sources) по имени src. На этом этапе вы получаете источник java, но файлы .xml по-прежнему не читаются, поэтому продолжайте.
Теперь откройте новую папку
Вставьте файл .apk, который вы хотите декодировать
Загрузите последнюю версию apktool И apktool install window (обе могут быть загружены из тех же link) и поместите их в одну папку
Откройте окно командной строки
Теперь запустите команду, например apktool if framework-res.apk
и следующую
apktool d myApp.apk
(где myApp.apk обозначает имя файла, которое вы хотите декодировать)
теперь вы получаете папку с файлами в этой папке и можете легко прочитать файлы apk xml.
Это не какой-либо шаг, просто скопируйте содержимое обеих папок (в данном случае и новую папку) на один
и наслаждайтесь исходным кодом...
Это альтернативное описание - на всякий случай, когда кто-то застрял над описанием выше. Выполните следующие шаги:
apktool.bat
(или apktool
для Linux) и apktool_<version>.jar
из http://ibotpeaches.github.io/Apktool/install/apktool.jar
и поместите оба файла в одну папку cmd.exe
) и перейдите в эту папку; убедитесь, что установлена среда Java (для Linux также проверьте заметки относительно необходимых библиотек)apktool decode [apk file]
Промежуточный результат: файлы ресурсов, AndroidManifest.xml
Промежуточный результат: 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
(может быть необязательным в зависимости от используемого декомпилятора)Результат: исходный код
Примечание: не разрешается декомпилировать пакеты сторонних поставщиков; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, полученный код, скорее всего, будет запутан.
В то время как вы можете декомпилировать ваш файл APK
, вы, вероятно, столкнетесь с одной большой проблемой:
он не вернет код, который вы написали. Вместо этого он будет возвращать все, что встраивается компилятором, с переменными, заданными случайными именами, а также функциями, заданными случайными именами. Это может занять значительно больше времени, чтобы попытаться декомпилировать и восстановить его в коде, который у вас был, чем начать.
К сожалению, такие вещи убили много проектов.
В будущем я настоятельно рекомендую изучить систему управления версиями, например CVS, SVN и git и т.д.
и как создать резервную копию.
Просто установите и получайте удовольствие. Я думаю, что это самый простой способ декомпилировать приложение.
apktool - это лучшее, что вы можете попробовать. Я сохранил некоторые xml с ним, но, честно говоря, я не знаю, как это будет работать с кодом .java.
Я бы порекомендовал вам иметь репозиторий кода, даже если ваш единственный кодер. Я использовал Project Locker для моих собственных проектов. Это дает вам бесплатные svn и git repos.
В этих двух статьях описывается, как объединить использование 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
, чтобы получить файлы ресурсов из apkdex2jar
для получения файла jar, который содержит классы в формате, который понравится Eclipse.JDGui
, чтобы просмотреть исходный кодJDGui
, вставьте его в класс внутри Eclipse и измените егоapktool будет работать. Вам даже не нужно знать хранилище ключей, чтобы извлечь исходный код (что немного страшно). Основной недостаток заключается в том, что источник представлен в формате Smali вместо Java. Другие файлы, такие как значок и main.xml, проходят отлично, хотя, возможно, стоит потратить время, чтобы хотя бы восстановить их. В конечном итоге вам, скорее всего, придется перезаписать Java-код с нуля.
Здесь вы можете найти apktool здесь. Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-zip, чтобы распаковать их.
Может быть легко увидеть источник:
В Android-студии 2.3, Build -> Analyze APK -> Select the apk that you want to decompile
.
Вы увидите исходный код.
Linf для справки:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2
Я покажу вам другой способ декомпилировать файлы .apk.
Вы можете выполнить первые 2 шага из " prankul garg". Таким образом, у вас есть еще одна возможность:
Шаг 3 ':
Загрузите "JD-GUI" , который легко найти. Откройте файл .jar в файле "jd-gui.exe". (Файл > Открыть файл > 'нашел ваш файл .jar). После этой процедуры вы можете сохранить все ресурсы в файле .zip.
Итак,
1st - вам нужно переименовать файл .apk в .zip
2nd - Вы должны декодировать файл .dex (если хотите, декодируйте файл .apk на dex2jar, что возможно)
3rd - вам нужно декодировать .jar файл с JD-GUI
Есть несколько способов сделать это:
Используйте функцию "Профиль или отладка APK" в Android Studio 3.0.
Он позволяет вам открывать и исследовать APK в 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...
Apktool для обратной инженерии сторонних, закрытых, бинарных приложений для Android.
Он может декодировать ресурсы до почти первоначальной формы и восстанавливать их после внесения некоторых изменений.
Это позволяет отлаживать smali-код шаг за шагом. Кроме того, упрощается работа с приложением из-за проектной структуры файла и автоматизации некоторых повторяющихся задач, таких как создание apk и т.д.
apktool - это путь. Онлайн-служба apktool существует: http://www.javadecompilers.com/apktool
Некоторые ограничения, очевидно, существуют из-за службы онлайн-характера: вы можете извлекать и исследовать активы и файл манифеста, но невозможно перекомпилировать приложение на данный момент.
Тем не менее, это бесполезный способ "открыть" приложение для Android.
Ниже ОНЛАЙН:
http://www.javadecompilers.com/apk
он делает ВСЕ одним щелчком мыши: декомпилировал .java файлы + ресурсы + xml (в одном .zip файле) с очень хорошим декомпилятором (jadx возвращает java-код в местах/функциях, где другие компиляции возвращают комментарии внутри функции типа "невозможно декомпилировать" или какой-либо ассемблер/машинный код Android)
Я лично рекомендую Show Java Android App получить исходный код. Вы можете загрузить его из игрового магазина или здесь
Этот сайт https://www.apkdecompilers.com/ сделал это автоматически.
Я сначала попробовал сайт, упомянутый в принятом ответе, но это не сработало для меня.
Вы можете попробовать DexPatcher. Он даже интегрируется с Android Studio. Он использует Apktool и Dex2Jar внутренне.
Вы также можете использовать эти инструменты самостоятельно.
Apktool декомпилирует apk и извлекает файлы .dex, которые могут быть преобразованы в jar с использованием Dex2Jar. Jar можно декомпилировать, используя JD-GUI. Вы можете увидеть Java-код с помощью этого инструмента. Хотя сходство декомпилированного кода с реальным кодом не может быть гарантировано. Есть некоторые продвинутые методы обфускации кода, доступные на рынке, которые испортили код, чтобы затруднить декомпиляцию/понимание. например. Proguard