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


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

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

16 1071

16 ответов:

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


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

Шаг 1:

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

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

Шаг 2:

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

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

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

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

  5. скачать Java декомпилятор, дважды щелкните на 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 карту, так что вы можете просмотреть его на вашем компьютере. Он не требует корня или чего-то еще.

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

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

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

эти две статьи описывают, как сочетать использование apktool и dex2jar взять и создать проект 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 будет работать. Вам даже не нужно знать keystore, чтобы извлечь исходный код (что немного пугает). Основным недостатком является то, что источник представлен в формате 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.исполняемый." (Файл > Открыть файл > своего .банку file'). После этой процедуры, вы можете сохранить все ресурсы .молнии.

и

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

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

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

ниже онлайн:

http://www.javadecompilers.com/apk

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

Apktool для обратного инжиниринга сторонних, закрытых, бинарных приложений для 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 с помощью этого инструмента. Хотя сходство декомпилированного кода с фактический код не может быть гарантирована. Есть некоторые продвинутые обфускации кода инструменты, доступные на рынке, которые портят код, чтобы затруднить декомпиляцию / понимание. например. Должны быть