Android runtime cra sh при использовании кода инъекции javassist - PullRequest
0 голосов
/ 05 августа 2020

Я пишу плагин и выполняю преобразование, использую код вставки javassist и успешно компилирую, но приложение было cra sh,

Ниже мой код

val onResume = clazz.getDeclaredMethod("onResume")
onResume.insertAfter("com.bingliu.demo.gerrit.utils.Logger.printInfo(\"onResume called\");")

Это cra sh журнал

2020-08-05 17:31:25.663 32579-32579/com.bingliu.demo.gerrit D/AndroidRuntime: Shutting down VM
2020-08-05 17:31:25.673 32579-32579/com.bingliu.demo.gerrit E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.bingliu.demo.gerrit, PID: 32579
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/bingliu/demo/gerrit/utils/Logger;
        at com.bingliu.demo.gerrit.MainActivity.onResume(MainActivity.kt:24)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1412)
        at android.app.Activity.performResume(Activity.java:7305)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3777)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3817)
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6680)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.bingliu.demo.gerrit.utils.Logger" on path: DexPathList[[zip file "/system/framework/com.google.android.wearable.jar", zip file "/data/app/com.bingliu.demo.gerrit-9Hd8Mg1Nxp1QtE6jwM3iOg==/base.apk"],nativeLibraryDirectories=[/data/app/com.bingliu.demo.gerrit-9Hd8Mg1Nxp1QtE6jwM3iOg==/lib/arm, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.bingliu.demo.gerrit.MainActivity.onResume(MainActivity.kt:24) 
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1412) 
        at android.app.Activity.performResume(Activity.java:7305) 
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3777) 
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3817) 
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51) 
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6680) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

код Gradle

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation gradleApi()
    implementation 'com.android.tools.build:gradle:4.0.1'
    implementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72'
    implementation 'org.javassist:javassist:3.26.0-GA'
}

1 Ответ

0 голосов
/ 17 августа 2020

Мне нравится эта ошибка, потому что не вызывается CtClass # writeFile (String directoryName) для Logger.class

...