Tencent / Shadow

零反射全动态Android插件框架
BSD 3-Clause "New" or "Revised" License
7.36k stars 1.29k forks source link

关于插件和宿主通信的问题 #1294

Closed Florizt closed 2 months ago

Florizt commented 4 months ago

宿主和插件都依赖了一个公共lib库。 宿主将这个库打包进去,插件只是compileOnly。

插件和宿主同进程。

lib库定义一个flow

object MsgProvider { val msgToHost = MutableSharedFlow<String>(0, 1, BufferOverflow.DROP_OLDEST) } 在插件activity中: 1、MsgProvider.msgToHost.emit("这是插件发给宿主的消息") ->能成功启动插件,并发送消息

2、MsgProvider.msgToPlugin.collect{ } -> crash FATAL EXCEPTION: main Process: com.test.music.plugin.host, PID: 27990 java.lang.IncompatibleClassChangeError: Class 'com.test.music.plugin.app.MainActivity$onCreate$12$1' does not implement interface 'kotlin.coroutines.Continuation' in call to 'kotlin.coroutines.CoroutineContext kotlin.coroutines.Continuation.getContext()' (declaration of 'kotlin.coroutines.jvm.internal.ContinuationImpl' appears in /data/app/~~ayBlAcJS3LRsIwFkHYHyyw==/com.test.music.plugin.host-LlMG87V4w42qVgQfZs82ew==/base.apk) at kotlin.coroutines.jvm.internal.ContinuationImpl.(ContinuationImpl.kt:102) at kotlinx.coroutines.flow.SharedFlowImpl$collect$1.(Unknown Source:2) at kotlinx.coroutines.flow.SharedFlowImpl.collect$suspendImpl(Unknown Source:22) at kotlinx.coroutines.flow.SharedFlowImpl.collect(Unknown Source:0) at com.test.music.plugin.app.MainActivity$onCreate$12$1.invokeSuspend(MainActivity.kt:174) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:367) at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30) at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default(Cancellable.kt:25) at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:110) at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126) at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56) at kotlinx.coroutines.BuildersKt.launch(Unknown Source:1) at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47) at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source:1) at com.test.music.plugin.app.MainActivity.onCreate$lambda$22(MainActivity.kt:170) at com.test.music.plugin.app.MainActivity.$r8$lambda$oBURvhqu96RUfNnOLexNg5F0e44(Unknown Source:0) at com.test.music.plugin.app.MainActivity$$ExternalSyntheticLambda6.onClick(Unknown Source:2) at android.view.View.performClick(View.java:7498) at android.view.View.performClickInternal(View.java:7471) at android.view.View.access$3700(View.java:843) at android.view.View$PerformClick.run(View.java:29098) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:233) at android.os.Looper.loop(Looper.java:344) at android.app.ActivityThread.main(ActivityThread.java:8249) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:589) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1071) Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@fa2b6fd, Dispatchers.Main.immediate]

@shifujun 麻烦看下什么原因啊