Для пояснения, есть два основных пути, которые вы можете выбрать здесь в зависимости от того, чего вы хотите достичь:
Декомпилируйте байт-код Dalvik (dex) в читаемый исходный код Java. Вы можете сделать это легко с dex2jar и jd-gui , как упоминает Фред. Полученный в результате источник полезен для чтения и понимания функциональности приложения, но, скорее всего, не даст 100% пригодного для использования кода. Другими словами, вы можете прочитать исходный код, но вы не можете изменить и упаковать его. Обратите внимание, что если исходный код был запутан с помощью proguard, полученный исходный код будет значительно сложнее распутать.
Другой основной альтернативой является дизассемблирование байт-кода до smali , языка ассемблера, предназначенного именно для этой цели. Я обнаружил, что самый простой способ сделать это с помощью apktool . После того, как вы установили apktool, вы можете просто указать его на файл apk, и вы получите файл smali для каждого класса, содержащегося в приложении. Вы можете читать и изменять smali или даже полностью заменять классы, генерируя smali из нового источника Java (для этого вы можете скомпилировать ваш источник .java в файлы .class с помощью javac, а затем преобразовать ваши файлы .class в файлы .dex с помощью Android dx-компилятор, а затем используйте baksmali (smali disassembler) для преобразования файлов .dex в .smali, как описано в этот вопрос . Здесь может быть ярлык). Как только вы закончите, вы можете легко упаковать apk обратно с apktool снова. Обратите внимание, что apktool не подписывает полученный apk, поэтому вам нужно позаботиться об этом , как и о любом другом приложении Android .
Если вы пойдете по smali-маршруту, вы можете попробовать APK Studio , IDE, которая автоматизирует некоторые из вышеперечисленных шагов, чтобы помочь вам с декомпиляцией и перекомпиляцией apk и установкой его на устройство.
Короче говоря, вы можете либо декомпилировать в Java, которая более читабельна, но, вероятно, необратима, либо разбирать на smali, который труднее читать, но гораздо более гибок, чтобы вносить изменения и перепаковывать измененное приложение. Какой подход вы выберете, будет зависеть от того, чего вы хотите достичь.
Наконец, предложение смеет также заслуживает внимания. Это инструмент ретаргетинга для преобразования файлов .dex и .apk в файлы java .class, чтобы их можно было проанализировать с помощью типичных инструментов статического анализа java.