Есть ли способ получить исходный код из файла APK?

Жесткий диск на моем ноутбуке просто разбился, и я потерял весь исходный код приложения, над которым я работал последние два месяца. Все, что у меня есть, это файл APK, который хранится в моем письме, когда я отправил его другу.

Есть ли способ извлечь исходный код из этого файла APK?

938
задан Frank Bozzo 29 авг. '10 в 6:40
источник поделиться
16 ответов

Простой способ: использовать онлайн-инструмент 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 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 по-прежнему не читаются, поэтому продолжайте.

Шаг 3:

Теперь откройте новую папку

  • Вставьте файл .apk, который вы хотите декодировать

  • Загрузите последнюю версию apktool И apktool install window (обе могут быть загружены из тех же link) и поместите их в одну папку

  • Откройте окно командной строки

  • Теперь запустите команду, например apktool if framework-res.apk и следующую

  • apktool d myApp.apk (где myApp.apk обозначает имя файла, которое вы хотите декодировать)

теперь вы получаете папку с файлами в этой папке и можете легко прочитать файлы apk xml.

Шаг 4:

Это не какой-либо шаг, просто скопируйте содержимое обеих папок (в данном случае и новую папку) на один

и наслаждайтесь исходным кодом...

1290
ответ дан Prankul Garg 21 мая '11 в 14:20
источник поделиться

Это альтернативное описание - на всякий случай, когда кто-то застрял над описанием выше. Выполните следующие шаги:

  • скачать 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; наконец, полученный код, скорее всего, будет запутан.

101
ответ дан Trinimon 13 марта '13 в 23:09
источник поделиться

В то время как вы можете декомпилировать ваш файл APK, вы, вероятно, столкнетесь с одной большой проблемой:

он не вернет код, который вы написали. Вместо этого он будет возвращать все, что встраивается компилятором, с переменными, заданными случайными именами, а также функциями, заданными случайными именами. Это может занять значительно больше времени, чтобы попытаться декомпилировать и восстановить его в коде, который у вас был, чем начать.

К сожалению, такие вещи убили много проектов.
В будущем я настоятельно рекомендую изучить систему управления версиями, например CVS, SVN и git и т.д.

и как создать резервную копию.

90
ответ дан Ryan Gooler 29 авг. '10 в 6:58
источник поделиться

apktool - это лучшее, что вы можете попробовать. Я сохранил некоторые xml с ним, но, честно говоря, я не знаю, как это будет работать с кодом .java.

Я бы порекомендовал вам иметь репозиторий кода, даже если ваш единственный кодер. Я использовал Project Locker для моих собственных проектов. Это дает вам бесплатные svn и git repos.

22
ответ дан Macarse 29 авг. '10 в 15:17
источник поделиться

В этих двух статьях описывается, как объединить использование 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-утилиты и удалите существующие ресурсы.
  • Откройте файл jar с помощью JDGui, чтобы просмотреть исходный код
  • Возьмите любой исходный код из JDGui, вставьте его в класс внутри Eclipse и измените его
  • Удалить этот класс из файла jar (так что вы не имеете одного и того же класса, определенного несколько раз)
  • Запустите его.
20
ответ дан Tom Hennen 06 дек. '12 в 4:38
источник поделиться

apktool будет работать. Вам даже не нужно знать хранилище ключей, чтобы извлечь исходный код (что немного страшно). Основной недостаток заключается в том, что источник представлен в формате Smali вместо Java. Другие файлы, такие как значок и main.xml, проходят отлично, хотя, возможно, стоит потратить время, чтобы хотя бы восстановить их. В конечном итоге вам, скорее всего, придется перезаписать Java-код с нуля.

Здесь вы можете найти apktool здесь. Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-zip, чтобы распаковать их.

16
ответ дан Ryan Berger 29 авг. '10 в 7:02
источник поделиться

Может быть легко увидеть источник:

В 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

5
ответ дан SKK 25 мая '17 в 17:06
источник поделиться

Я покажу вам другой способ декомпилировать файлы .apk.

Вы можете выполнить первые 2 шага из " prankul garg". Таким образом, у вас есть еще одна возможность:

Шаг 3 ':

Загрузите "JD-GUI" , который легко найти. Откройте файл .jar в файле "jd-gui.exe". (Файл > Открыть файл > 'нашел ваш файл .jar). После этой процедуры вы можете сохранить все ресурсы в файле .zip.

Итак,

1st - вам нужно переименовать файл .apk в .zip

2nd - Вы должны декодировать файл .dex (если хотите, декодируйте файл .apk на dex2jar, что возможно)

3rd - вам нужно декодировать .jar файл с JD-GUI

5
ответ дан Franklin Hirata 25 февр. '13 в 15:22
источник поделиться

Есть несколько способов сделать это:

  • Используйте функцию "Профиль или отладка APK" в Android Studio 3.0.

    Он позволяет вам открывать и исследовать APK в Android Studio. Классы декомпилируются в smali. Ресурсы не извлекаются, и такие вещи, как "Перейти к определению", "Найти все ссылки" и отладки, не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smalidea.

    android-studio

    select-file

    code

  • Используйте jadx.

    Jadx декомпилирует код в данном APK для исходных файлов java.

    jdax-img

  • Используйте 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...
    
3
ответ дан 0xcaff 11 авг. '17 в 6:27
источник поделиться

Apktool для обратной инженерии сторонних, закрытых, бинарных приложений для Android.

Он может декодировать ресурсы до почти первоначальной формы и восстанавливать их после внесения некоторых изменений.

Это позволяет отлаживать smali-код шаг за шагом. Кроме того, упрощается работа с приложением из-за проектной структуры файла и автоматизации некоторых повторяющихся задач, таких как создание apk и т.д.

http://ibotpeaches.github.io/Apktool/

3
ответ дан Biswajit Karmakar 15 мая '16 в 11:21
источник поделиться

apktool - это путь. Онлайн-служба apktool существует: http://www.javadecompilers.com/apktool

Некоторые ограничения, очевидно, существуют из-за службы онлайн-характера: вы можете извлекать и исследовать активы и файл манифеста, но невозможно перекомпилировать приложение на данный момент.

Тем не менее, это бесполезный способ "открыть" приложение для Android.

2
ответ дан Andrew Rukin 11 июля '17 в 8:51
источник поделиться

Ниже ОНЛАЙН:

http://www.javadecompilers.com/apk

он делает ВСЕ одним щелчком мыши: декомпилировал .java файлы + ресурсы + xml (в одном .zip файле) с очень хорошим декомпилятором (jadx возвращает java-код в местах/функциях, где другие компиляции возвращают комментарии внутри функции типа "невозможно декомпилировать" или какой-либо ассемблер/машинный код Android)

2
ответ дан Kamil Kiełczewski 10 июня '17 в 17:36
источник поделиться

Этот сайт https://www.apkdecompilers.com/ сделал это автоматически.

Я сначала попробовал сайт, упомянутый в принятом ответе, но это не сработало для меня.

1
ответ дан usman 11 сент. '17 в 9:20
источник поделиться

Я лично рекомендую Show Java Android App получить исходный код. Вы можете загрузить его из игрового магазина или здесь

1
ответ дан Codelover 04 окт. '17 в 9:33
источник поделиться

Вы можете попробовать DexPatcher. Он даже интегрируется с Android Studio. Он использует Apktool и Dex2Jar внутренне.
Вы также можете использовать эти инструменты самостоятельно. Apktool декомпилирует apk и извлекает файлы .dex, которые могут быть преобразованы в jar с использованием Dex2Jar. Jar можно декомпилировать, используя JD-GUI. Вы можете увидеть Java-код с помощью этого инструмента. Хотя сходство декомпилированного кода с реальным кодом не может быть гарантировано. Есть некоторые продвинутые методы обфускации кода, доступные на рынке, которые испортили код, чтобы затруднить декомпиляцию/понимание. например. Proguard

0
ответ дан Lakshmikant Deshpande 16 нояб. '17 в 13:53
источник поделиться

Другие вопросы по меткам или Задайте вопрос