Как добавить новый класс в приложение, декомпилированное с помощью apktool?

Я новичок в apktool, так что прости мою неопытность. Мне нужно научиться декомпилировать apk, вставить какой-то код, собрать его и установить.

До сих пор я достиг цели декомпиляции, построения декомпилированного кода (и подписанного) и установки сгенерированного apk на устройство. Приложение работает правильно таким образом.

Что мне нужно сделать сейчас, так это понять, как добавить в него свой собственный код. В частности, мне нужно включить в метод onCreate основного действия (непосредственно перед закрытием метода) следующий код:

new MyClass(parameters);

и затем создайте новый класс Java в той же папке основного действия, которое реализует MyClass. Для этого первым делом я предположил сначала создать новое пустое приложение в Android Studio, собрать его и декодировать apk, чтобы получить smali-версию исходного кода. Затем я добавил MyClass в пустое приложение в Android Studio, собрал его и расшифровал недавно сгенерированный apk, который теперь включает дополнительный код и файлы, представленные MyClass.

Затем я скопировал дополнительный код и файлы, относящиеся к MyClass, и вставил его в исходный код smali калькулятора внутри метода onCreate его основного файла smali активности (прямо перед return-void .end method из onCreate) Соответственно, я изменил все пути из пустого приложения, чтобы отразить путь приложения калькулятора, т. е. я изменил все

Lcom/example/brok85/emptyapp/MyClass

в

Lcom/google/android/calculator/app/MyClass

во всех файлах, включая файлы MyClass smali. Затем я пересобрал приложение калькулятора, подписал его и установил на устройстве (носите эмулятор ОС). Однако приложение вылетает при запуске. Глядя на logcat, у меня есть следующее исключение:

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/calculator/app/MyClass;
at com.google.android.calculator.app.CalculatorActivity.onCreate(SourceFile:139)

Почему я получаю эту ошибку? Почему до сих пор указывает Lcom/google/android/calculator/app/MyClass вместо com.google.android.calculator.app.MyClass?

Любая помощь могла бы быть полезна.

Ниже приведена другая полезная информация, в том числе полная трассировка стека исключения.

Информация

  1. Версия Apktool ( apktool -version ) - 2.3.1
  2. Операционная система (Mac, Linux, Windows) - Mac
  3. APK От? (Playstore, ROM, Other) - Другое

StackTrace/Logcat

/com.google.android.calculator E/AndroidRuntime: FATAL EXCEPTION: main Process: com.google.android.calculator, PID: 5129 java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/calculator/app/MyClass; at com.google.android.calculator.app.CalculatorActivity.onCreate(SourceFile:139) at android.app.Activity.performCreate(Activity.java:6975) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.calculator.app.MyClass" on path: DexPathList[[zip file "/system/framework/com.google.android.wearable.jar", zip file "/data/app/com.google.android.calculator-TMlvBd9OU5fNf9_vXXnIHw==/base.apk"],nativeLibraryDirectories=[/data/app/com.google.android.calculator-TMlvBd9OU5fNf9_vXXnIHw==/lib/x86, /system/lib, /system/vendor/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.google.android.calculator.app.CalculatorActivity.onCreate(SourceFile:139)  at android.app.Activity.performCreate(Activity.java:6975)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)  at android.app.ActivityThread.-wrap11(Unknown Source:0)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)  at android.os.Handler.dispatchMessage(Handler.java:105)  at android.os.Looper.loop(Looper.java:164)  at android.app.ActivityThread.main(ActivityThread.java:6541)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

Каркасы

АПК является приложение калькулятор Android. Я использую его, чтобы узнать, как декомпилировать, добавлять код и перекомпилировать.

Вопросы задавать до подачи

  1. Ты пытался apktool d, apktool b ничего не меняя? да
  2. Если вы пытаетесь установить модифицированный APK, вы подали в отставку? да
  3. Вы используете последнюю версию apktool? да

0 ответов

Другие вопросы по тегам