Как перекомпилировать Jar в dex с помощью телефона Android?

Я извлек файл Dex с помощью редактора Apk и декомпилировал с помощью Jadex. Теперь я хочу перекомпилировать Jar в Dex с помощью телефона Android. Может ли кто-нибудь мне помочь?


person Jawad    schedule 27.01.2020    source источник
comment
Всегда полезно предоставить как можно больше контекста. Например, здесь вы указываете Android, но не указываете версию (платформу). Это просто пример того, как вы можете добавить полезный контекст. См. здесь stackoverflow.com/help/how-to-ask.   -  person Nigel Savage    schedule 27.01.2020


Ответы (1)


Я предполагаю, что вы имеете в виду Jadx, а не Jadex.

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

Проект Gradle можно загрузить в студию Android. И теоретически вы можете затем перекомпилировать приложение и получить обратно приложение, которое работает так же, как исходное приложение.

Практически это не работает в 99,9% всех случаев, потому что:

  1. Jadx не удалось декомпилировать некоторые методы.
  2. Сгенерированный код содержит мелкие проблемы, которые необходимо исправить вручную
  3. Очень сложные функции могут быть декомпилированы, но код немного изменился и поэтому работает не совсем так, как исходный байт-код.

В общем, декомпиляция приложения с помощью Jadx — совершенно неправильный подход, если вы хотите его перекомпилировать. На мой взгляд, самый надежный способ декомпилировать и перекомпилировать приложение — использовать apktool. В декомпилированных исходных текстах smali вы можете изменить методы, которые хотите изменить. Для лучшего понимания кода вы также можете декомпилировать соответствующие классы/методы в Jadx.

Для упрощения создания небольших фрагментов вы можете использовать Android Studio: используйте части кода, декомпилированные с помощью Jadx, скопируйте их в проект Android Studio, скомпилируйте его и откройте скомпилированный APK-файл с помощью Jadx. Выберите класс, который содержит код, откройте для него вкладку samli и скопируйте из него код smali. Обычно это проще, чем программировать непосредственно на Smali. См. также этот вопрос: Преобразовать файл .Java в файл .Smali

person Robert    schedule 27.01.2020