Патчим байт-код для просмотра логов в Android. Подробная инструкция и примеры кода
Привет, Хабр! Меня зовут Саша Лепехин, я разрабатываю мобильное приложение СберИнвестор под Android. Во время разработки и тестирования мобильного приложения мне часто нужно просматривать логи внутри приложения, причем без подключения по adb.
В принципе, есть множество приложений, которые позволяют просматривать содержимое logcat на устройств. Но с ними часто возникают самые разные проблемы: такие приложения нуждаются в специальных разрешениях или наличии root доступа, запускают отдельные процессы или сервисы. Или же они могут просто не работать на некоторых устройствах (например, там, где выключен logd). В этой небольшой статье предложено решение большинства подобных проблем. Оно основано на трансформации байт-кода приложения. Поехали!

Постановка задачи
Добавить возможность просмотра логов в приложении.
Фича должна работать только в debug build type.
Где-то в приложении должен быть RecyclerView, содержащий последние N записей из лога.
Важно, чтобы можно было просматривать сообщения, залогированные как внутри нашего приложения (исходный код принадлежит нам и мы можем вносить в него изменения), так и во внешних библиотеках.
Нет необходимости в логах операционной системы и других приложений.
Разбираемся с проблемами
Runtime.exec()
Задача с первого взгляда простая и решение, которое сразу приходит в голову — выполнить команду logcat с помощью, допустим, Runtime.exec(). То есть — получить список сообщений, распарсить какой-нибудь регуляркой и вывести на экран. Но на самом деле это не очень хорошая реализация. Дело в том, что мы выполняем какую-то стороннюю команду, поведение которой нами не регулируется — может измениться формат вывод, из-за чего придется править регулярное выражение, да и логирование может быть выключено на уровне операционной системы. В итоге получим не очень стабильное решение.
Но есть же Timber!
К сожалению, Timber тут не поможет. Можно было бы сделать свою реализацию Timber.log.Tree, но это никак не решит проблему с логированием сообщений из внешних библиотек, к которым нет доступа.
Требование
Runtime.exec(«logcat. «)
Timber
Просмотр сообщений залогированных из внешних модулей
Стабильность. Работа независимо от настроек системы/устройства
Еще варианты?
Здорово, если бы существовала возможность перехватить вызов методов android.util.Log и сохранить сообщение в свой Storage. Почему здорово? В этом случае не нужно логировать другие приложения, поэтому достаточно в apk поменять вызовы android.util.Log на какой-то собственный логгер). И это вполне реализуемо.
Самое время проанализировать, из каких частей может состоять наше решение.
Storage — место где хранятся залогированные сообщения (например, какой-нибудь циклический буфер в памяти).
Appender — компонент, который доставляет сообщение в storage.
Viewer — читает сообщения из storage и выводит пользователю.
В системе логирования Android можно сказать, что storage — набор циклических буферов, управляемых демоном logd, Appender — android.util.Log и библиотека liblog, а Viewer — logcat (https://developer.android.com/studio/command-line/logcat#Overview, https://developer.android.com/reference/android/util/Log). В коде вызываем методы android.util.Log, которые вызывают метод из liblog, а он, в свою очередь, отправляет сообщение в соответствующий буфер.
android.util.Log.d() → my.app.util.Log.d()
Gradle и AGP позволяют преобразовывать байт-код. Можно написать свой AsmClassVisitorFactory и ClassVisitor, который и будет производить эту трансформацию. Такая возможность есть — подобные преобразования выполняют многие библиотеки и фреймворки.
Что для этого нужно:
Реализовать свой Appender, методы которого будут вызываться вместо android.util.Log.
Написать ClassVisitor, который будет преобразовывать вызовы методов android.util.Log в соответствующие методы Appender. Тут воспользуемся относительно простым решением: в инструкции INVOKE_STATIC можно просто подменить один класс (method owner) на другой, при условии, что их дескрипторы идентичны (подходит и MethodHandle, но это доступно только начиная с «Android O»).
Воспользоваться удобной возможностью по преобразованию байт-кода предоставляемой AGP.
Реализовать свой Storage, где будут храниться логи.
Реализовать Viewer, чтобы можно было бы удобно просматривать логи, искать нужные сообщения и шарить логи между приложениями (почта/мессенджер).
Ну что ж, приступим.
К делу!
Appender
В реализации Appender (назовем его LogProxy) нет ничего сложного, но нужно обратить внимание на следующие моменты:
В принципе, это не обязательно, но для простоты реализации трансформера байт-кода повторим бинарный интерфейс методов логирования (v(), i(), w(), d(), e()) из класса android.uril.Log.
Кроме добавления сообщения в Storage оставим нативное логирование через android.util.Log, чтобы просматривать логи с помощью logcat.
Метод логирования должен быть быстрым и не блокировать поток, или сводить такие блокировки к минимуму.
Вот пример реализации Appender — LogProxy. В каждом методе потребуется реализовать сохранение сообщения в какой-то абстрактный Storage.
Storage
Сначала опишем наш Storage, пока на уровне интерфейса. Ну и заодно создадим сущность, представляющую единичную запись лога — LogEntry.
С доменной моделью вроде бы все, давайте теперь вернемся к LogProxy. Мы там оставили todo.
На данный момент нет конкретной реализации Storage (мы ее еще не написали), да и хотелось бы, чтобы была возможность использовать разные реализации, чтобы прямо в run-time указать нужный Storage, а не хардкодить это на уровне LogProxy.
Для этого создадим StorageDispatcher, который будет делегировать все свои вызовы конкретной реализации Storage.
И теперь методы LogProxy принимают вот такой вид:
Трансформация байт-кода
Теперь самое интересное — будем преобразовывать байт-код.
Начнем с реализации ClassVisitor. Напомню, что для этого потребуется в инструкции INVOKE_STATIC поменять method owner с andoid.util.log на наш LogProxy.
Если посмотреть на байт-код, то преобразование выглядит так:
Т.е. поменять строку «android.util.Log» на ru/sberbank/android/log/transformation/core/LogProxy». В этом поможет прекрасный фреймворк ASM. Вот так, например:
Получается, что visitMethodInsn выполняется как только встречает в коде инструкцию, которая вызывает какой-то метод. Далее проверяем: если это статический метод android.util.Log.d(. ), то вместо исходной инструкции записываем новую, точно такую же, но вызывающую метод LogProxy.d().
Для простоты изложения пока ограничимся только методом d() и оставим хардкод в виде строк дескрипторов (думаю, что написать полную реализацию несложно). А пока напишем AsmClassVisitorFactory и gradle плагин, который будет запускать MethodOwnerTransformationClassVisitor.
Осталось сбилдить плагин и подключить его к приложению.
После декомпиляции собранного приложения можно видеть, что там, где раньше вызывался Log.d(), теперь вызывается LogProxy.d().
Декомпилированный код без трансформации
Декомпилированный код с трансформацией
Осталось реализовать свой Storage. Он может быть in-memory, а может сохранять LogEntry на диск. Конкретная реализация Storage, как и компонентов для отображения его содержимого на экране устройства, уже не относится к теме этой статьи. Главное — не забывайте, что методы Storage могут быть вызваны из разных потоков. И помните, что логирование не должно ухудшать производительность приложения, даже в debug build type.
На этом все — если вдруг у вас возникли вопросы или предложения по теме, традиционно отписывайтесь в комментариях. Надеюсь, что статья окажется полезной для многих разработчиков.
Есть ли способ получить исходный код из файла APK?
жесткий диск на моем ноутбуке просто разбился, и я потерял весь исходный код приложения, над которым я работал в течение последних двух месяцев. У меня есть только APK файл, который хранится в моей электронной почте, когда я отправил его другу.
есть ли способ, чтобы извлечь исходный код из этого файла APK?
16 ответов
простой способ: используйте онлайн-инструмент http://www.javadecompilers.com/apk, загрузить apk и получить исходный код.
процедура декодирования .файлы apk, пошаговый метод:
Шаг 1:
создайте новую папку и скопируйте ее.файл apk, который вы хотите декодировать.
теперь переименуйте расширение этого .apk файл .zip (например, переименовать из filename.apk для имени файла.ZIP) и сохраните его. Теперь вы можете доступ к классам.DeX файлы и т. д. На этом этапе вы можете видеть drawables, но не xml и java-файлы, поэтому продолжайте.
Шаг 2:
теперь этот экстракт .zip-файл в той же папке (или новой папке).
скачать dex2jar и извлечь его в ту же папку (или новую папку).
ход занятия.dex файл на dex2jar папка.
теперь откройте командную строку и измените каталог на эту папку (или новую папку). Тогда пиши d2j-dex2jar classes.dex (для Mac terminal или ubuntu напишите ./d2j-dex2jar.sh classes.dex ) и нажмите enter. Теперь у тебя есть занятия.Декс.dex2jar файл в той же папке.
скачать Java decompiler, дважды щелкните по jd-gui, нажмите «Открыть файл» и откройте классы.Декс.dex2jar файл из этой папки: теперь вы получаете файлы классов.
сохранить все эти файлы классов (в JD-gui нажмите Файл — > Сохранить все источники) по имени src. На этом этапе вы получаете источник java, но .xml-файлы по-прежнему не читаются, поэтому продолжайте.
Шаг 3:
теперь откройте другую новую папку
положить в .apk файл, который вы хотите декодировать
скачать последнюю версию apktool и окно установки apktool (оба могут быть скачано по той же ссылке) и поместите их в ту же папку
откройте командное окно
Теперь запустите команду apktool if framework-res.apk и далее
apktool d myApp.apk (где myApp.apk обозначает имя файла, которое вы хотите декодировать)
теперь вы получаете папку с файлами в этой папке и можете легко читать xml-файлы apk.
Шаг 4:
это не какой-либо шаг, просто скопируйте содержимое обеих папок (в данном случае обеих новых папок)в одну
и наслаждайтесь исходным кодом.
это альтернативное описание-на всякий случай, если кто-то застрял с описанием выше. Выполните следующие действия:
- скачать apktool.bat (или apktool для Linux) и apktool_<version>.jar от http://ibotpeaches.github.io/Apktool/install/
- переименуйте файл jar сверху в apktool.jar и поместите оба файла в одну папку
промежуточный результат: файлы ресурсов, AndroidManifest.xml
промежуточный результат: classes.dex
результат исходный код
Примечание: не разрешается декомпилировать пакеты сторонних производителей; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, результирующий код, скорее всего, будет запутан
пока вы можете декомпилировать свой APK файл, вы, вероятно, нажмете одну большую проблему:
он не собирается возвращать код, который ты написал. Вместо этого он будет возвращать все, что компилятор встроил, с переменными, заданными случайными именами, а также функциями, заданными случайными именами. Это может занять значительно больше времени, чтобы попытаться декомпилировать и восстановить его в код, который у вас был, чем начать все сначала.
к сожалению, такие вещи убил много проекты.
В будущем я настоятельно рекомендую изучить систему управления версиями, например CVS, SVN и git etc.
и как это сделать.
существует также новое приложение на Play Store С помощью которого можно декомпилировать apk (системные приложения тоже) и просмотреть исходный код прямо на вашем смартфоне. Она сохраняет файлы на SD карту, так что вы можете просмотреть его на вашем компьютере. Для этого не Требуется root или что-то еще.
просто установите и получайте удовольствие. Я думаю, что это самый простой способ декомпилировать приложение.
apktool это лучшее, что вы можете попробовать. Я сохранил с ним xml, но, честно говоря, я не знаю, как он будет работать с ним .Java-код.
Я бы рекомендовал вам иметь репозиторий кода, даже если вы единственный кодер. Я использовал Проект Locker для моих собственных проектов. Это дает вам бесплатный SVN и Git РЕПО.
эти две статьи описывают, как сочетать использование apktool и dex2jar взять APK файл и создать проект Eclipse, который может создавать и запускать его.
- использовать apktool to получить файлы ресурсов из apk
- использовать dex2jar чтобы получить файл jar, содержащий классы в формате, который понравится Eclipse.
- создать проект Eclipse укажите его на файлы ресурсов и новый файл jar
- откройте файл jar с помощью утилиты zip и удалите существующие ресурсы
- откройте файл jar с помощью JDGui для просмотра исходного кода
- Возьмите любой исходный код, который вам нужен от JDGui , вставьте его в класс внутри Eclipse и изменить его
- удалите этот класс из файла jar (так что у вас нет одного и того же класса, определенного несколько раз)
- запустить его.
apktool будет работать. Вам даже не нужно знать хранилище ключей для извлечения исходного кода (что немного страшно). Основным недостатком является то, что источник представлен в формате Smali вместо Java. Другие файлы, такие как значок и основной.xml проходит отлично, хотя и может стоить вашего времени, чтобы по крайней мере восстановить их. В конечном счете, вам, скорее всего, придется переписать свой Java-код с нуля.
вы можете найти apktool здесь. Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-Zip, чтобы распаковать их.
есть несколько способов сделать это:
используйте функцию «профиль или отладка APK» в Android Studio 3.0.
Это позволяет открывать и исследовать APKs в Android Studio. Занятия декомпиляция в smali. Ресурсы не извлекаются, и такие вещи, как» перейти к определению»,» найти все ссылки » и отладка не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smalidea.



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

Apktool-это инструмент командной строки, который извлекает ресурсы и декомпилирует код в smali для данного apk. Вы также можете перекомпилировать с помощью apktool. Вот пример этого в действии:
может быть легко увидеть источник:
в Android studio 2.3, Build -> Analyze APK -> Select the apk that you want to decompile .
Вы увидите, что это исходный код.
Я покажу вам другой способ декомпилировать .apk файлы.
вы можете выполнить первые 2 шага от «prankul Гарг«. Так что у вас есть еще одна возможность:
Шаг 3′:
скачать «JD-GUI», это легко найти. Открой свой .Джар файл в » JD-gui.исполняемый.» (Файл > Открыть файл > ‘ нашел свой .Джар «файл»). После этой процедуры можно сохранить все ресурсы в .zip.
1st-вы должны переименовать .apk до .zip
2nd-вы должны декодировать .Декс!—2— > файл (если хотите, расшифруйте .apk до dex2jar, это возможно)
3rd-вы должны декодировать .Джар С JD-GUI
ниже онлайн:
это сделать все одним щелчком мыши: decompiled .java файлы + ресурсы + xml (в одном .zip-файл) с очень хорошим декомпилятором (Jadx возвращает java-код в местах/функциях, где другие компиляторы возвращают комментарии внутри функции, такие как «невозможно декомпилировать» или некоторый ассемблер/машинный код android)
Apktool по инженерный 3-й партии, закрытые, бинарные приложения для Android.
Он может декодировать ресурсы почти в исходную форму и перестраивать их после внесения некоторых изменений.
Это позволяет отлаживать код smali шаг за шагом. Также это упрощает работу с приложением из-за проектной файловой структуры и автоматизации некоторых повторяющихся задач, таких как построение apk, так далее.
этот сайт 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 с помощью этого инструмента. Хотя сходство декомпилированного кода с фактический код не может быть гарантирована. Есть некоторые продвинутые обфускации кода инструменты, доступные на рынке, которые испортят код, чтобы затруднить декомпиляцию / понимание. например. Должны быть
Есть ли способ получить исходный код из файла APK?
Жесткий диск на моем ноутбуке просто разбился, и я потерял весь исходный код приложения, над которым я работал последние два месяца. Все, что у меня есть, это файл APK, который хранится в моем письме, когда я отправил его другу.
Есть ли способ извлечь исходный код из этого файла APK?
ОТВЕТЫ
Ответ 1
Простой способ: используйте онлайн-инструмент 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 напишите ./d2j-dex2jar.sh classes.dex ) и нажмите клавишу ввода. Теперь у вас есть файл classes.dex.dex2jar в той же папке.
Загрузите декомпилятор java, дважды щелкните jd-gui, щелкните открытый файл и откройте файл classes.dex.dex2jar из этой папки: теперь вы получаете файлы классов.
Сохраните все эти файлы классов (в jd-gui выберите Файл → Сохранить все источники) под именем src. На этом этапе вы получаете исходный код Java, но файлы .xml по-прежнему не читаются, поэтому продолжайте.
Шаг 3:
Теперь откройте еще одну новую папку
Поместите в файл .apk, который вы хотите декодировать
Загрузите последнюю версию apktool и окно установки apktool (обе можно скачать по одной и той же ссылке) и поместите их в одну папку
Откройте командное окно
Теперь запустите команду как apktool if framework-res.apk (если у вас ее нет, получите ее здесь) и затем
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 и поместите оба файла в одну папку
Промежуточный результат: файлы ресурсов, AndroidManifest.xml
Промежуточный результат: classes.dex
Промежуточный результат: classes_dex2jar.jar
Результат: исходный код
Примечание: не разрешается декомпилировать пакеты сторонних поставщиков; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, полученный код, скорее всего, будет запутан.
Ответ 3
В то время как вы можете декомпилировать ваш файл APK , вы, вероятно, столкнетесь с одной большой проблемой:
он не вернет код, который вы написали. Вместо этого он будет возвращать все, что встраивается компилятором, с переменными, заданными случайными именами, а также функциями, заданными случайными именами. Это может занять значительно больше времени, чтобы попытаться декомпилировать и восстановить его в коде, который у вас был, чем начать.
К сожалению, такие вещи убили много проектов.
В будущем я настоятельно рекомендую изучить систему управления версиями, например CVS, SVN и git и т.д.
и как создать резервную копию.
Ответ 4
Просто установите и получайте удовольствие. Я думаю, что это самый простой способ декомпилировать приложение.
Ответ 5
apktool — лучшая вещь, которую вы можете попробовать. Я сохранил некоторые XML с ним, но, честно говоря, я не знаю, как это будет работать с кодом .java.
Я бы порекомендовал вам иметь хранилище кода, даже если вы единственный кодер. Я использую Project Locker для своих собственных проектов. Это дает вам бесплатные репозитории SVN и GIT.
Ответ 6
В этих двух статьях описывается, как совместить использование apktool и dex2jar для получения файла APK и создания проекта Eclipse, который может его собрать и запустить.
- Используйте apktool чтобы получить файлы ресурсов из apk
- Используйте dex2jar чтобы получить файл jar, содержащий классы в формате, который понравится Eclipse.
- Создайте проект Eclipse, наведите его на файлы ресурсов и новый файл jar
- Откройте файл jar утилитой zip и удалите существующие ресурсы
- Откройте файл JDGui с JDGui чтобы просмотреть исходный код
- Возьмите любой исходный код из JDGui , JDGui его в класс внутри Eclipse и измените его
- Удалите этот класс из файла jar (чтобы один и тот же класс не определялся несколько раз)
- Запустить его.
Ответ 7
apktool будет работать. Вам даже не нужно знать хранилище ключей, чтобы извлечь исходный код (что немного страшно). Основной недостаток заключается в том, что источник представлен в формате Smali вместо Java. Другие файлы, такие как значок и main.xml, проходят отлично, хотя, возможно, стоит потратить время, чтобы хотя бы восстановить их. В конечном итоге вам, скорее всего, придется перезаписать Java-код с нуля.
Здесь вы можете найти apktool здесь. Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-zip, чтобы распаковать их.
Ответ 8
Есть несколько способов сделать это:
Используйте функцию «Профиль или Отладка APK» в Android Studio 3.0.
Это позволяет открывать и изучать APK в Android Studio. Классы декомпилированы в smali. Ресурсы не извлекаются, и такие вещи, как «Перейти к определению», «Найти все ссылки» и отладка, не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smallidea.



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

Apktool — это инструмент командной строки, который извлекает ресурсы и декомпилирует код в smali для данного apk. Вы также можете перекомпилировать, используя apktool. Вот пример этого в действии:
Ответ 9
Может быть, легко увидеть источник:
В Android Studio 2.3, Build → Analyze APK → Select the apk that you want to decompile .
Вы увидите исходный код.
Ответ 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
Ниже ОНЛАЙН:
он делает ВСЕ одним щелчком мыши: декомпилировал .java файлы + ресурсы + xml (в одном .zip файле) с очень хорошим декомпилятором (jadx возвращает java-код в местах/функциях, где другие компиляции возвращают комментарии внутри функции типа «невозможно декомпилировать» или какой-либо ассемблер/машинный код Android)
Ответ 12
Этот сайт https://www.apkdecompilers.com/ сделал это автоматически.
Сначала я попробовал сайт, упомянутый в принятом ответе, но у меня это не получилось.
Ответ 13
Я лично рекомендую показать Java Android App, чтобы получить исходный код. Вы можете скачать его из игрового магазина или отсюда
Ответ 14
Apktool для обратной инженерии сторонних, закрытых, бинарных приложений для Android.
Он может декодировать ресурсы до почти первоначальной формы и восстанавливать их после внесения некоторых изменений.
Это позволяет отлаживать smali-код шаг за шагом. Кроме того, упрощается работа с приложением из-за проектной структуры файла и автоматизации некоторых повторяющихся задач, таких как создание apk и т.д.
Ответ 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
Я нашел следующее как самый простой метод:
- Переименуйте ваш app.apk в app.zip (измените расширение с apk на zip)
- Распакуйте zip файл в папку
- Используйте инструмент JADX, чтобы прочитать исходный код, представленный в файле classes.dex.
Ответ 19
Есть приложение для этого и обычно занимает всего несколько кликов, и все готово. https://github.com/Nuvolect/DeepDive-Android
- Выберите Приложения, в разделе «Установленные приложения» выберите свое приложение. Если его там нет, вы можете загрузить APK.
- Выберите «Извлечь APK»
- Выберите «Распаковать APK»
- Выберите «Декомпилировать с помощью 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
- http://www.javadecompilers.com/apk
- Примечание: внутренне используя Jadx
автоматически декодировать из АПК в исходный код Java
upload файл apk + нажать Run + подождать некоторое время + нажать Download чтобы получить zip + unzip ->
ваш ожидаемый исходный код 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/
/ — ваш ожидаемый 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 :
- apk/app to dex
- dex to jar
- jar to java src
Шаг 1: apk/app to dex
использовать инструмент ( FDex2 /DumpDex) для выгрузки/извлечения (одного или нескольких) файла dex из запущенного приложения
подготовить среду
- root ed андроид
- настоящий телефон
- или эмулятор
- здесь, используя китайскийNox App Player 夜 夜 安卓 模拟器
- на телефон или эмулятор

- Примечание: необходимо перезапустить Xposed, чтобы заставить работать FDex2
- Адрес загрузки FDex2, китайский:
- 工具 工具 FDex2-CSDN 下载
- 链接: https://pan.baidu.com/s/1lTF8CN96bxWpFwv7J174lg提取 码: 3e3t
выкинуть dex из запущенного приложения
запустите FDex2 затем щелкните по вашему имени apk, чтобы позже включить/захватить dex
- в своей корневой папке обычно найдет несколько файлов 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
Шаг 3: jar to java src
используйте один из инструментов:
- Jadx
- Процион
- Инструмент с графическим интерфейсом на основе Procyon:
- Люйтен
- Просмотр байт-кода
- Кракатау
- Fernflower
- Cavaj
конвертировать jar в java src
для преобразования из jar в java src:
Jadx > Procyon > CRF >> JD-GUI
поэтому рекомендуем использовать: Jadx / jadx-gui
- двойной щелчок для запуска jadx-gui
- открыть файл dex
- File → save all

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

Более подробное объяснение можно посмотреть в моей онлайн-книге китайского учебника:
Как посмотреть исходный код приложения Android
С каждым днем приложений для Android становится все больше и больше. Миллионы интересных игр и полезных программ можно найти в Play Market. Все они имеют удобный интерфейс и справляются с поставленной задачей. Без них сложно представить современный мир информационных технологий. Эта статья ориентирована на людей, которые не только ценят функционал и внешний вид приложений, а еще и интересуются их внутренним устройством.
Если Вам когда-либо было интересно, что находится «под капотом» любимого приложения, и вы немного смыслите в программировании — эта статья для Вас. Мы расскажем, как посмотреть исходный код приложения Android прямо на вашем гаджете. Поехали!
Общие сведения
Большинство программ для ОС Android, как и большая часть самой операционной системы, написаны на языке программирования Java. А это значит, что посмотрев в исходный код программ Android, мы, скорее всего, увидим Java код с использованием Android SDK (которая включает в себя инструменты платформы Android). Повторюсь: чтобы понимать исходный код приложений, нужно иметь базовые знания Java и принципы работы Android.
Как узнать исходный код приложений Android?
Для начала скачайте приложение, исходный код которого Вас заинтересовал. Затем зайдите в Play Market и скачайте утилиту под названием Show Java. Именно она будет заниматься декомпилированием. Установили? Отлично, а теперь перейдем к самому интересному — извлечению исходного кода Android программы. Запускаем Show Java.

Выберите нужное приложение из установленных, или найдите его на SD карте. Теперь нужно выбрать декомпилятор. Я обычно выбираю CRF. Если возникнут проблемы — пробуйте JaDX.
Начнется декомпиляция программы. Это может занять некоторое время. Чем больше приложение — тем дольше декомпилятор будет доставать исходные коды. Пока вы ждете результата, почитайте о перспективных языках программирования.
По завершению процесса вы получите список пакетов с исходниками Android приложения. Конечно, это не 100% копия кода, которую писали разработчики этого приложения. Но основная логика сохраняется, разобрать не сложно. Что делать с исходниками? Что угодно. Смотрите, разбирайте, возможно Вам будут интересны некоторые «фичи» или особенности реализации функционала программы.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
- Инструмент с графическим интерфейсом на основе Procyon:
- здесь, используя китайскийNox App Player 夜 夜 安卓 模拟器
- sources/com/


