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

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

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

1154
29 авг. '10 в 6:40
источник поделиться
21 ответ

Простой способ: используйте онлайн-инструмент http://www.javadecompilers.com/apk, загрузите apk и получите исходный код.


Процедура декодирования .apk файлов, пошаговый метод:

Шаг 1:

  1. Создайте новую папку и скопируйте файл .apk, который вы хотите декодировать.

  2. Теперь переименуйте расширение этого файла .apk в .zip (например, переименуйте из filename.apk в filename.zip) и сохраните его. Теперь вы можете получить доступ к файлам classes.dex и т.д. На этом этапе вы можете видеть графические объекты, но не файлы XML и Java, поэтому продолжайте.

Шаг 2:

  1. Теперь распакуйте этот файл .zip в ту же папку (или NEW FOLDER).

  2. Скачайте dex2jar и распакуйте его в ту же папку (или в NEW FOLDER).

  3. Переместите файл classes.dex в папку dex2jar.

  4. Теперь откройте командную строку и измените каталог на эту папку (или NEW FOLDER). Затем напишите d2j-dex2jar classes.dex (для терминала Mac или Ubuntu напишите ./d2j-dex2jar.sh classes.dex) и нажмите клавишу ввода. Теперь у вас есть файл classes.dex.dex2jar в той же папке.

  5. Загрузите декомпилятор java, дважды щелкните jd-gui, щелкните открытый файл и откройте файл classes.dex.dex2jar из этой папки: теперь вы получаете файлы классов.

  6. Сохраните все эти файлы классов (в jd-gui выберите Файл → Сохранить все источники) под именем src. На этом этапе вы получаете исходный код Java, но файлы .xml по-прежнему не читаются, поэтому продолжайте.

Шаг 3:

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

  1. Поместите в файл .apk, который вы хотите декодировать

  2. Загрузите последнюю версию apktool и окно установки apktool (обе можно скачать по одной и той же ссылке) и поместите их в одну папку

  3. Откройте командное окно

  4. Теперь запустите команду как apktool if framework-res.apk (если у вас ее нет, получите ее здесь) и затем

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

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

Шаг 4:

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

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

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

117
13 марта '13 в 23:09
источник

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

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

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

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

106
29 авг. '10 в 6:58
источник

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

Я бы порекомендовал вам иметь хранилище кода, даже если вы единственный кодер. Я использую Project Locker для своих собственных проектов. Это дает вам бесплатные репозитории SVN и GIT.

25
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

В основном вы:

  1. Используйте apktool чтобы получить файлы ресурсов из apk
  2. Используйте dex2jar чтобы получить файл jar, содержащий классы в формате, который понравится Eclipse.
  3. Создайте проект Eclipse, наведите его на файлы ресурсов и новый файл jar
  4. Откройте файл jar утилитой zip и удалите существующие ресурсы
  5. Откройте файл JDGui с JDGui чтобы просмотреть исходный код
  6. Возьмите любой исходный код из JDGui, JDGui его в класс внутри Eclipse и измените его
  7. Удалите этот класс из файла jar (чтобы один и тот же класс не определялся несколько раз)
  8. Запустить его.
21
06 дек. '12 в 4:38
источник

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

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

19
29 авг. '10 в 7:02
источник

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

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

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

    android-studio

    select-file

    code

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

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

    jdax-img

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

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

В 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

7
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

6
25 февр. '13 в 15:22
источник

Ниже ОНЛАЙН:

http://www.javadecompilers.com/apk

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

5
10 июня '17 в 17:36
источник

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

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

5
11 сент. '17 в 9:20
источник

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

5
04 окт. '17 в 9:33
источник

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

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

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

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

4
15 мая '16 в 11:21
источник

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

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

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

3
11 июля '17 в 8:51
источник

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

3
16 нояб. '17 в 13:53
источник

Студия Android предлагает вам проанализировать любой файл apk.

1 - В меню сборки выберите параметр анализировать apk и выберите файл apk. 2 - В результате вы получите файл classes.dex и другие файлы. 3 - Нажмите на classes.dex, который предоставит вам список папок, пакетов, библиотек и файлов. 4 - Из настроек android studio установите плагин под названием "Dex to Jar" 5 - нажмите на любой файл активности вашего извлеченного проекта и выберите "dex to jar" в меню сборки.

Это приведет к фактическому коду вашего Java файла.

Приветствия.

1
10 мая '19 в 22:48
источник

Есть приложение для этого и обычно занимает всего несколько кликов, и все готово. https://github.com/Nuvolect/DeepDive-Android

  1. Выберите Приложения, в разделе "Установленные приложения" выберите свое приложение. Если его там нет, вы можете загрузить APK.
  2. Выберите "Извлечь APK"
  3. Выберите "Распаковать APK"
  4. Выберите "Декомпилировать с помощью Jadx". Это может занять несколько секунд или несколько минут в зависимости от скорости вашего устройства

После этого вы можете просмотреть исходный код, загрузить его на другой компьютер с elFinder или выполнить поиск по нему с помощью Lucene.

В дополнение к Jadx есть декомпиляторы CFR и Fernflower.

1
27 февр. '19 в 0:46
источник

Самым простым способом является использование Apk OneClick Decompiler. Это пакет инструментов для декомпиляции и дизассемблирования APK (пакетов Android).

ФУНКЦИИ

  • Все функции интегрированы в контекстное меню Windows.
  • Декомпилируйте классы APK в исходные коды Java.
  • Разберите APK, чтобы смали код и расшифруйте его ресурсы.
  • Установите APK на телефон, щелкнув правой кнопкой мыши.
  • Перекомпилируйте APK после редактирования кода и/или ресурсов. Во время перекомпиляции:
  • Оптимизировать PNG изображения
  • Войти apks
  • Zipalign

ТРЕБОВАНИЯ

Java Runtime Environment (JRE) должна быть установлена.

Вы можете скачать его по этой ссылке Apk OneClick Decompiler

Наслаждайся этим.

1
16 февр. '19 в 16:34
источник

Я нашел следующее как самый простой метод:

  1. Переименуйте ваш app.apk в app.zip (измените расширение с apk на zip)
  2. Распакуйте zip файл в папку
  3. Используйте инструмент JADX, чтобы прочитать исходный код, представленный в файле classes.dex.
0
26 февр. '19 в 1:43
источник

в зависимости от вашего состояния, если ваш 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:

  1. apk/app to dex
  2. dex to jar
  3. jar to java src

детальное объяснение:

Шаг 1: apk/app to dex

использовать инструмент (FDex2/DumpDex) для выгрузки/извлечения (одного или нескольких) файла dex из запущенного приложения

шаги:

подготовить среду

  • root ed андроид
  • установить ваш Android APK
    • на телефон или эмулятор
  • Установленный Xposed Installer
  • установить FDex2/DumpDex в XPposed и включить его
  • установить ваш Android APK на телефон/эмулятор

выкинуть dex из запущенного приложения

  • запустите FDex2 затем щелкните по вашему имени apk, чтобы позже включить/захватить dex

  • (в телефоне/эмуляторе) запустите ваше приложение
  • найти и скопировать весь ресурс apk в /data/data/com/yourCompanyName/yourProjectName
    • в своей корневой папке обычно найдет несколько файлов 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
  • Filesave all

например:

экспортированный источник Java:


Более подробное объяснение можно посмотреть в моей онлайн-книге китайского учебника:

0
08 апр. '19 в 9:39
источник

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