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

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

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

16 ответов


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


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

Шаг 1:

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

  2. теперь переименуйте расширение этого .apk файл .zip (например, переименовать из filename.apk для имени файла.ZIP) и сохраните его. Теперь вы можете доступ к классам.DeX файлы и т. д. На этом этапе вы можете видеть drawables, но не xml и java-файлы, поэтому продолжайте.

Шаг 2:

  1. теперь этот экстракт .zip-файл в той же папке (или новой папке).

  2. скачать dex2jar и извлечь его в ту же папку (или новую папку).

  3. ход занятия.dex файл на dex2jar папка.

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

  5. скачать Java decompiler, дважды щелкните по jd-gui, нажмите "Открыть файл" и откройте классы.Декс.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 обозначает имя файла, которое вы хотите декодировать)

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

Шаг 4:

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

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


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

  1. скачать apktool.bat (или apktool для Linux) и apktool_<version>.jar от http://ibotpeaches.github.io/Apktool/install/
  2. переименуйте файл jar сверху в apktool.jar и поместите оба файла в одну папку

  3. откройте окно dos (cmd.exe) и перейдите в эту папку; убедитесь, что установлена среда Java (для Linux также проверьте заметки о необходимых библиотеках)
  4. начало: apktool decode [apk file]

    промежуточный результат: файлы ресурсов, AndroidManifest.xml

  5. распакуйте файл APK с помощью распаковщика по вашему выбору

    промежуточный результат: classes.dex

  6. скачать и извлечь dex2jar-0.0.9.15.zip от http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=
  7. перетащить classes.dex на dex2jar.bat (или введите <path_to>\dex2jar.bat classes.dex в коробке DOS; для Linux используйте dex2jar.sh)

    промежуточный результат: classes_dex2jar.jar

  8. распакуйте classes_dex2jar.jar (может быть необязательным в зависимости от используемого декомпилятор)
  9. декомпилируйте файлы классов (например, с помощью JD-GUI или DJ Декомпилятор)

    результат исходный код

Примечание: не разрешается декомпилировать пакеты сторонних производителей; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, результирующий код, скорее всего, будет запутан


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

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

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

и как это сделать.


существует также новое приложение на Play Store С помощью которого можно декомпилировать apk (системные приложения тоже) и просмотреть исходный код прямо на вашем смартфоне. Она сохраняет файлы на SD карту, так что вы можете просмотреть его на вашем компьютере. Для этого не Требуется root или что-то еще.

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


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

Я бы рекомендовал вам иметь репозиторий кода, даже если вы единственный кодер. Я использовал Проект Locker для моих собственных проектов. Это дает вам бесплатный SVN и Git РЕПО.


эти две статьи описывают, как сочетать использование 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 to получить файлы ресурсов из apk
  2. использовать dex2jar чтобы получить файл jar, содержащий классы в формате, который понравится Eclipse.
  3. создать проект Eclipse укажите его на файлы ресурсов и новый файл jar
  4. откройте файл jar с помощью утилиты zip и удалите существующие ресурсы
  5. откройте файл jar с помощью JDGui для просмотра исходного кода
  6. Возьмите любой исходный код, который вам нужен от JDGui, вставьте его в класс внутри Eclipse и изменить его
  7. удалите этот класс из файла jar (так что у вас нет одного и того же класса, определенного несколько раз)
  8. запустить его.

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

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


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

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

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

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

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

в Android studio 2.3,Build -> Analyze APK -> Select the apk that you want to decompile.
Вы увидите, что это исходный код.

Linf для reference:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2


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

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

Шаг 3':

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

и

1st-вы должны переименовать .apk до .zip

2nd-вы должны декодировать .Декс!--2-- > файл (если хотите, расшифруйте .apk до dex2jar, это возможно)

3rd-вы должны декодировать .Джар С JD-GUI


ниже онлайн:

http://www.javadecompilers.com/apk

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


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

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

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

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


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

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


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


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

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

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


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