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

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

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

Ответ 1

Простой способ: используйте онлайн-инструмент 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:

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

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

Ответ 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

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

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

Ответ 7

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

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

Ответ 8

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

  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...
    

Ответ 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

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

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

Ответ 19

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

  1. Выберите Приложения, в разделе "Установленные приложения" выберите свое приложение. Если его там нет, вы можете загрузить APK.
  2. Выберите "Извлечь APK"
  3. Выберите "Распаковать APK"
  4. Выберите "Декомпилировать с помощью 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:

  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:


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