Shadow icon indicating copy to clipboard operation
Shadow copied to clipboard

插件运行异常:ClassCastException com.tencent.shadow.sample.host.HostApplication to com.tencent.shadow.core.runtime.ShadowApplication

Open cocomikes opened this issue 1 year ago • 0 comments

你好大佬,插件内部有Hook系统ContextImpl这些逻辑,在成功编译后,启动插件时报上述的ClassCastException,我传入的参数也是插件内的UseCaseApplication,UseCaseApplication是ShadowApplication的子类呢。

想问的有

  1. 导致类型转换异常的原因是 context instanceof ContextWrapper 递归向上查找ContextImpl,导致下面的mApplication拿到了宿主的Application类型吗?
  2. 使用useHostContext可以规避这个问题吗?
  3. Hook相关的源码我可以修改,在Shadow Transform这块有修改的思路吗?

相关日志如下:

base:com.tencent.shadow.sample.host.HostApplication@c3a13d9, getApplicationContext:com.tencent.shadow.sample.plugin.app.lib.UseCaseApplication@7312f59

2023-08-11 18:24:59.239 24598-24598 AndroidRuntime com...hadow.sample.host E FATAL EXCEPTION: main Process: com.tencent.shadow.sample.host:plugin, PID: 24598 java.lang.ClassCastException: Couldn't convert result of type com.tencent.shadow.sample.host.HostApplication to com.tencent.shadow.core.runtime.ShadowApplication at $Proxy7.mApplication(Unknown Source) at com.dofun.vbox.client.fixer.ContextFixer.fixContext(ContextFixer.java:44) at com.tencent.shadow.sample.plugin.app.lib.UseCaseApplication.attachBaseContext(UseCaseApplication.java:41) at com.tencent.shadow.core.loader.ShadowPluginLoader.callApplicationOnCreate$realAction(ShadowPluginLoader.kt:120) at com.tencent.shadow.core.loader.ShadowPluginLoader.access$callApplicationOnCreate$realAction(ShadowPluginLoader.kt:43) at com.tencent.shadow.core.loader.ShadowPluginLoader$callApplicationOnCreate$1.run(ShadowPluginLoader.kt:132) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:223) at android.os.Looper.loop(Looper.java:324) at android.app.ActivityThread.main(ActivityThread.java:8496) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1059)

提前拜谢 Thanks♪(・ω・)ノ

附问题复现demo : 地址: https://github.com/cocomikes/Shadow/tree/issue-ClassCastException-ShadowApplication

cocomikes avatar Aug 11 '23 10:08 cocomikes