Декомпилируйте APK, измените его и затем перекомпилируйте

Мне нужно изменить существующий APK, изменить источники и затем перекомпилировать их.

  • Я могу декомпилировать его с помощью dex2jar или apktool, он отлично работает
  • Из файла jar я могу получить java-источники (используя jd-gui)
  • Затем я могу изменить java-файлы

Но теперь я хотел бы знать, как перекомпилировать java-файлы и вернуть их обратно в файл jar! (Часть jar должна быть простой, основная проблема заключается в том, как перекомпилировать java-файлы для Android)

Я знаю, что другое решение – использовать apktool, а затем модифицировать smali-файлы, но, похоже, это очень сложно, когда мы хотим добавить много кода!

Мое приложение является базовым безвредности HelloWorld.

Я знаю, что на этот вопрос еще дан ответ, я хотел бы передать информацию.

Существует онлайн-декомпилятор для андроидных апк

  1. Загрузить apk с локальной машины
  2. Подождите несколько минут
  3. Загрузить исходный код в формате zip

Я не знаю, насколько это достоверно.

@darkheir Ответ – это ручной способ декомпиляции apk. Это помогает нам понять разные этапы создания Apk.

Еще один онлайн-компилятор Apk @Andrew Rukin : http://www.javadecompilers.com/apk

Еще стоит. Шляпы для создателей.

Благодаря Chris Jester-Young мне удалось заставить его работать!

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

  • С Dex2jar я получил Jar.
  • С jd-gui я конвертирую свою Jar обратно в файлы Java.
  • С apktool я получил манифест android и файлы ressources

  • В Eclipse я создаю новый проект с теми же настройками, что и старый (проверяя всю информацию в файле манифеста)

  • Когда проект создается, я заменяю все ресурсы и манифест теми, которые я получил с помощью apktool
  • Я вставляю java-файлы, которые я извлек из Jar в src foled (с учетом пакетов)
  • Я изменяю эти файлы тем, что мне нужно
  • Все компилируется!

/! \ Убедитесь, что вы удалили старый apk с устройства, будет ошибка, указав, что подпись apk не такая же, как у старой!

  1. Сначала загрузите инструмент dex2jar из следующей ссылки http://code.google.com/p/dex2jar/downloads/list

  2. Извлеките файл, который он создает папку dex2jar

  3. Теперь вы выбираете свой файл apk и изменяете его расширение .apk на .zip после смены расширения, похоже, на zip-файл, а затем извлеките этот zip-файл, который вы нашли файл classes.dex

  4. Теперь выберите файл dex2jar и поместите его в папку dex2jar

  5. Теперь откройте окно cmd и введите путь к папке dex2jar

  6. Теперь введите команду dex2jar.bat classes.dex и нажмите Enter.

  7. Теперь откройте папку dex2jar вы нашли файл classes_dex2jar.jar

  8. Затем вы загрузите инструмент декомпилятора java со следующей ссылки: http://java.decompiler.free.fr/?q=jdgui

  9. Последний шаг Откройте файл classes_dex2jar.jar в инструменте java classes_dex2jar.jar теперь вы можете увидеть код apk

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

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

Эти инструменты ДОЛЖНЫ использоваться в такой ситуации, иначе это неэтично и даже иногда является незаконным (кража чужого усилия). Поэтому, пожалуйста, используйте его с умом.

Это мои любимые инструменты для этого:

javadecompilers.com

И чтобы получить apk из google play, вы можете отправить его или проверить на этих сайтах:

  • apk-dl.com

  • apkpure.com

В день публикации этого ответа я тестировал все ссылки, и он работал идеально для меня.

ПРИМЕЧАНИЕ. Декомпиляция Apk не эффективна в случае кода, прошедшего проверку. Поскольку Proguard сжимается и обфускает код и переименовывает классы в бессмысленные имена, которые затрудняют понимание кода.

Бонус:

Основной учебник по использованию Proguard :

Dex2jar с jd -gui предоставит все исходные файлы java, но они не совсем то же самое. Они почти эквивалентны .class файлы (не 100%). Поэтому, если вы хотите изменить код для файла apk:

  • Декомпилировать с помощью apktool

  • Apktool создаст файл smali (Assembly version of dex) для каждого java-файла с тем же именем.

  • Smali понятен человеку, вносить изменения в соответствующий файл, перекомпилировать с помощью того же apktool ( apktool b Nw.apk <Folder Containing Modified Files> )

Это способ:

  1. Использование apktool для декодирования:

     $ apktool d -f {apkfile} -o {output folder} 
  2. Затем, используя JADX (на github.com/skylot/jadx)

     $ jadx -d {output folder} {apkfile} 

2 инструменты извлекают и декомпилируют в ту же папку вывода.

Простой способ: использование онлайн-дескриптора APK

Используйте luckypatcher и удалите проверку лицензии, чем вам не нужно подписывать apk. Используйте winrar для изменения вашего измененного исходного кода без декомпиляции apk.

Нужно изменить расширение файла с .apk на .zip . Затем извлеките файлы, измените их, а затем сжимайте их .zip и не забудьте переименовать расширение обратно в .apk .

Для этого нам даже не нужно использовать какой-либо компьютер. Я предпочитаю ES-файл-проводник, который также помогает просматривать и редактировать исходный код.