Есть ли способ получить исходный код из файла APK?
Жесткий диск на моем ноутбуке просто разбился, и я потерял весь исходный код приложения, над которым я работал последние два месяца.
Все, что у меня есть, это файл APK, который хранится в моем письме, когда я отправил его другу.
Есть ли способ извлечь исходный код из этого файла APK?
Ответы
Ответ 1
Простой способ: используйте онлайн-инструмент http://www.javadecompilers.com/apk, загрузите apk и получите исходный код.
Процедура декодирования .apk файлов, пошаговый метод:
Шаг 1:
-
Создайте новую папку и скопируйте файл .apk, который вы хотите декодировать.
-
Теперь переименуйте расширение этого файла .apk в .zip (например, переименуйте из filename.apk в filename.zip) и сохраните его. Теперь вы можете получить доступ к файлам classes.dex и т.д. На этом этапе вы можете видеть графические объекты, но не файлы XML и Java, поэтому продолжайте.
Шаг 2:
-
Теперь распакуйте этот файл .zip в ту же папку (или NEW FOLDER).
-
Скачайте dex2jar и распакуйте его в ту же папку (или в NEW FOLDER).
-
Переместите файл classes.dex в папку dex2jar.
-
Теперь откройте командную строку и измените каталог на эту папку (или NEW FOLDER). Затем напишите d2j-dex2jar classes.dex
(для терминала Mac или Ubuntu напишите ./d2j-dex2jar.sh classes.dex
) и нажмите клавишу ввода. Теперь у вас есть файл classes.dex.dex2jar в той же папке.
-
Загрузите декомпилятор java, дважды щелкните jd-gui, щелкните открытый файл и откройте файл classes.dex.dex2jar из этой папки: теперь вы получаете файлы классов.
-
Сохраните все эти файлы классов (в jd-gui выберите Файл → Сохранить все источники) под именем src. На этом этапе вы получаете исходный код Java, но файлы .xml по-прежнему не читаются, поэтому продолжайте.
Шаг 3:
Теперь откройте еще одну новую папку
-
Поместите в файл .apk, который вы хотите декодировать
-
Загрузите последнюю версию apktool и окно установки apktool (обе можно скачать по одной и той же ссылке) и поместите их в одну папку
-
Откройте командное окно
-
Теперь запустите команду как apktool if framework-res.apk
(если у вас ее нет, получите ее здесь) и затем
-
apktool d myApp.apk
(где myApp.apk обозначает имя файла, который вы хотите декодировать)
теперь вы получаете папку с файлами в этой папке и можете легко читать файлы apk xml.
Шаг 4:
Это не какой-либо шаг, просто скопируйте содержимое обеих папок (в данном случае обе новые папки) в одну
и наслаждайтесь исходным кодом...
Ответ 2
Это альтернативное описание - на всякий случай, когда кто-то застрял над описанием выше. Выполните следующие шаги:
- скачать
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
- unpack
classes_dex2jar.jar
(может быть необязательным в зависимости от используемого декомпилятора)
- декомпилируйте ваши файлы классов (например, JD-GUI или DJ Decompiler)
Результат: исходный код
Примечание: не разрешается декомпилировать пакеты сторонних поставщиков; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, полученный код, скорее всего, будет запутан.
Ответ 3
В то время как вы можете декомпилировать ваш файл APK
, вы, вероятно, столкнетесь с одной большой проблемой:
он не вернет код, который вы написали. Вместо этого он будет возвращать все, что встраивается компилятором, с переменными, заданными случайными именами, а также функциями, заданными случайными именами. Это может занять значительно больше времени, чтобы попытаться декомпилировать и восстановить его в коде, который у вас был, чем начать.
К сожалению, такие вещи убили много проектов.
В будущем я настоятельно рекомендую изучить систему управления версиями, например CVS, SVN и git и т.д.
и как создать резервную копию.
Ответ 4
В Play Store есть новое приложение, с помощью которого можно декомпилировать apk (системные приложения тоже) и просматривать исходный код прямо на вашем смартфоне, Он сохраняет файлы на SD-карте, чтобы вы могли просматривать их на своем компьютере. Это не требует root или что-то еще.
Просто установите и получайте удовольствие. Я думаю, что это самый простой способ декомпилировать приложение.
Ответ 5
apktool - лучшая вещь, которую вы можете попробовать. Я сохранил некоторые XML с ним, но, честно говоря, я не знаю, как это будет работать с кодом .java.
Я бы порекомендовал вам иметь хранилище кода, даже если вы единственный кодер. Я использую Project Locker для своих собственных проектов. Это дает вам бесплатные репозитории SVN и GIT.
Ответ 6
В этих двух статьях описывается, как совместить использование 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
чтобы получить файлы ресурсов из apk - Используйте
dex2jar
чтобы получить файл jar, содержащий классы в формате, который понравится Eclipse. - Создайте проект Eclipse, наведите его на файлы ресурсов и новый файл jar
- Откройте файл jar утилитой zip и удалите существующие ресурсы
- Откройте файл
JDGui
с JDGui
чтобы просмотреть исходный код - Возьмите любой исходный код из
JDGui
, JDGui
его в класс внутри Eclipse и измените его - Удалите этот класс из файла jar (чтобы один и тот же класс не определялся несколько раз)
- Запустить его.
Ответ 7
apktool будет работать. Вам даже не нужно знать хранилище ключей, чтобы извлечь исходный код (что немного страшно). Основной недостаток заключается в том, что источник представлен в формате Smali вместо Java. Другие файлы, такие как значок и main.xml, проходят отлично, хотя, возможно, стоит потратить время, чтобы хотя бы восстановить их. В конечном итоге вам, скорее всего, придется перезаписать Java-код с нуля.
Здесь вы можете найти apktool здесь. Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-zip, чтобы распаковать их.
Ответ 8
Есть несколько способов сделать это:
-
Используйте функцию "Профиль или Отладка APK" в Android Studio 3.0.
Это позволяет открывать и изучать APK в Android Studio. Классы декомпилированы в smali. Ресурсы не извлекаются, и такие вещи, как "Перейти к определению", "Найти все ссылки" и отладка, не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smallidea.
-
Используйте 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...
Ответ 9
Может быть, легко увидеть источник:
В Android Studio 2.3, Build → Analyze APK → Select the apk that you want to decompile
.
Вы увидите исходный код.
Ссылка для справки:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2
Ответ 10
Я покажу вам другой способ декомпилировать файлы .apk.
Вы можете выполнить первые 2 шага из " prankul garg". Таким образом, у вас есть еще одна возможность:
Шаг 3 ':
Загрузите "JD-GUI" , который легко найти.
Откройте файл .jar в файле "jd-gui.exe". (Файл > Открыть файл > 'нашел ваш файл .jar). После этой процедуры вы можете сохранить все ресурсы в файле .zip.
Итак,
1st - вам нужно переименовать файл .apk в .zip
2nd - Вы должны декодировать файл .dex (если хотите, декодируйте файл .apk на dex2jar, что возможно)
3rd - вам нужно декодировать .jar файл с JD-GUI
Ответ 11
Ниже ОНЛАЙН:
http://www.javadecompilers.com/apk
он делает ВСЕ одним щелчком мыши: декомпилировал .java файлы + ресурсы + xml (в одном .zip файле) с очень хорошим декомпилятором (jadx возвращает java-код в местах/функциях, где другие компиляции возвращают комментарии внутри функции типа "невозможно декомпилировать" или какой-либо ассемблер/машинный код Android)
Ответ 12
Этот сайт https://www.apkdecompilers.com/ сделал это автоматически.
Сначала я попробовал сайт, упомянутый в принятом ответе, но у меня это не получилось.
Ответ 13
Я лично рекомендую показать Java Android App, чтобы получить исходный код. Вы можете скачать его из игрового магазина или отсюда
Ответ 14
Apktool для обратной инженерии сторонних, закрытых, бинарных приложений для Android.
Он может декодировать ресурсы до почти первоначальной формы и восстанавливать их после внесения некоторых изменений.
Это позволяет отлаживать smali-код шаг за шагом. Кроме того, упрощается работа с приложением из-за проектной структуры файла и автоматизации некоторых повторяющихся задач, таких как создание apk и т.д.
http://ibotpeaches.github.io/Apktool/
Ответ 15
apktool - это путь.
Онлайн-служба apktool существует: http://www.javadecompilers.com/apktool
Некоторые ограничения, очевидно, существуют из-за службы онлайн-характера: вы можете извлекать и исследовать активы и файл манифеста, но невозможно перекомпилировать приложение на данный момент.
Тем не менее, это бесполезный способ "открыть" приложение для Android.
Ответ 16
Вы можете попробовать DexPatcher. Он даже интегрируется с Android Studio. Он использует Apktool и Dex2Jar внутренне.
Вы также можете использовать эти инструменты самостоятельно.
Apktool декомпилирует apk и извлекает файлы .dex, которые могут быть преобразованы в jar с использованием Dex2Jar. Jar можно декомпилировать, используя JD-GUI. Вы можете увидеть Java-код с помощью этого инструмента. Хотя сходство декомпилированного кода с реальным кодом не может быть гарантировано. Есть некоторые продвинутые методы обфускации кода, доступные на рынке, которые испортили код, чтобы затруднить декомпиляцию/понимание. например. Proguard
Ответ 17
Самым простым способом является использование Apk OneClick Decompiler. Это пакет инструментов для декомпиляции и дизассемблирования APK (пакетов Android).
ФУНКЦИИ
- Все функции интегрированы в контекстное меню Windows.
- Декомпилируйте классы APK в исходные коды Java.
- Разберите APK, чтобы смали код и расшифруйте его ресурсы.
- Установите APK на телефон, щелкнув правой кнопкой мыши.
- Перекомпилируйте APK после редактирования кода и/или ресурсов. Во время перекомпиляции:
- Оптимизировать PNG изображения
- Войти apks
- Zipalign
ТРЕБОВАНИЯ
Java Runtime Environment (JRE) должна быть установлена.
Вы можете скачать его по этой ссылке Apk OneClick Decompiler
Наслаждайся этим.
Ответ 18
Я нашел следующее как самый простой метод:
- Переименуйте ваш app.apk в app.zip (измените расширение с apk на zip)
- Распакуйте zip файл в папку
- Используйте инструмент JADX, чтобы прочитать исходный код, представленный в файле classes.dex.
Ответ 19
Есть приложение для этого и обычно занимает всего несколько кликов, и все готово. https://github.com/Nuvolect/DeepDive-Android
- Выберите Приложения, в разделе "Установленные приложения" выберите свое приложение. Если его там нет, вы можете загрузить APK.
- Выберите "Извлечь APK"
- Выберите "Распаковать APK"
- Выберите "Декомпилировать с помощью Jadx". Это может занять несколько секунд или несколько минут в зависимости от скорости вашего устройства
После этого вы можете просмотреть исходный код, загрузить его на другой компьютер с elFinder или выполнить поиск по нему с помощью Lucene.
В дополнение к Jadx есть декомпиляторы CFR и Fernflower.
Ответ 20
Студия Android предлагает вам проанализировать любой файл apk.
1 - В меню сборки выберите параметр анализировать apk и выберите файл apk. 2 - В результате вы получите файл classes.dex и другие файлы. 3 - Нажмите на classes.dex, который предоставит вам список папок, пакетов, библиотек и файлов. 4 - Из настроек android studio установите плагин под названием "Dex to Jar" 5 - нажмите на любой файл активности вашего извлеченного проекта и выберите "dex to jar" в меню сборки.
Это приведет к фактическому коду вашего Java файла.
Приветствия.
Ответ 21
в зависимости от вашего состояния, если ваш Android APK:
Условие 1: НЕ затвердевать (от Tencent Legu/Qihoo 360/...)
Выбор1: с помощью онлайн-сервиса
такие как:
используя www.javadecompilers.com
идти к:
автоматически декодировать из АПК в исходный код Java
шаги:
upload
файл apk + нажать Run
+ подождать некоторое время + нажать Download
чтобы получить zip + unzip ->
sources/com/{yourCompanyName}/{yourProjectName}
ваш ожидаемый исходный код Java
Choice2: декомпилировать/взломать самостоятельно
Используйте соответствующий инструмент для декомпиляции/взлома самостоятельно:
используйте jadx
/jadx-gui
конвертировать apk
в java sourcecode
скачайте jadx-0.9.0.zip, затем распакуйте в bin/jadx
, затем:
- режим командной строки:
- в терминальном запуске:
jadx-0.9.0/bin/jadx -o output_folder/path_to_your_apk/your_apk_file.apk
- output_folder покажет декодированные
sources
и resources
-
sources/com/{yourCompanyName}/{yourProjectName}
- ваш ожидаемый java sourcecode
- Режим графического интерфейса
- дважды щелкните для запуска
jadx-0.9.0/bin/jadx-gui
(Linux jadx-gui.sh
/Windows jadx-gui.bat
) - открыть файл
apk
- это будет автоматическое декодирование → увидеть ожидаемый исходный код Java
-
save all
или save as Gradle project
например:
Условие 2: закалка (Tencent Legu/Qihoo 360/...)
основной метод 3 steps
:
-
apk/app to dex
-
dex to jar
-
jar to java src
детальное объяснение:
Шаг 1: apk/app to dex
использовать инструмент (FDex2
/DumpDex) для выгрузки/извлечения (одного или нескольких) файла dex
из запущенного приложения
шаги:
подготовить среду
-
root
ed андроид - настоящий телефон
- или эмулятор
- установить ваш Android APK
- Установленный Xposed Installer
- установить
FDex2
/DumpDex в XPposed и включить его -
- Примечание: необходимо перезапустить Xposed, чтобы заставить работать FDex2
- Адрес загрузки FDex2, китайский:
- установить ваш Android APK на телефон/эмулятор
выкинуть dex
из запущенного приложения
Step2: dex to jar
используйте инструмент (dex2jar
), чтобы преобразовать (определенный, содержащий логику приложения) файл dex
файл jar
загрузить dex2jar получил dex-tools-2.1-SNAPSHOT.zip, распаковать получил dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh
, затем
sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex
например:
dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar
Шаг 3: jar to java src
используйте один из инструментов:
конвертировать jar
в java src
для преобразования из jar в java src:
Jadx
> Procyon
> CRF
>> JD-GUI
поэтому рекомендуем использовать: Jadx
/jadx-gui
шаги:
- двойной щелчок для запуска
jadx-gui
- открыть файл
dex
-
File
→ save all
например:
экспортированный источник Java:
Более подробное объяснение можно посмотреть в моей онлайн-книге китайского учебника: