Tencent / Shadow

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

多插件内部是否不支持路由?程序走到路由初始化就挂了,有个插件却是好的,这个崩溃是否与插件加载机制有关呢? #310

Closed weiwenqiang closed 4 months ago

weiwenqiang commented 4 years ago

多插件内部是否不支持路由?程序走到路由初始化就挂了,有个插件却是好的,这个崩溃是否与插件加载机制有关呢?

多个插件内部需要路由初始化,但是插件内部调用初始化程序崩溃,有一个插件内部初始化没有问题,不初始化又不能用,不知道怎么处理,并且虽然有baidumap,但是程序内并没有一个地方引用,却报ARouter$$Providers$$libbaidumap,不知道为何。

Process: com.zzz.myemergencyclientnew, PID: 9933 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zzz.myemergencyclientnew/com.zzz.myemergencyclientnew.host.SingleTaskContainerActivity}: java.lang.RuntimeException: com.alibaba.android.arouter.exception.HandlerException: ARouter::ARouter init logistics center exception! [com.alibaba.android.arouter.routes.ARouter$$Providers$$libbaidumap] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6815) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) Caused by: java.lang.RuntimeException: com.alibaba.android.arouter.exception.HandlerException: ARouter::ARouter init logistics center exception! [com.alibaba.android.arouter.routes.ARouter$$Providers$$libbaidumap] at com.tencent.shadow.core.loader.delegates.ShadowActivityDelegate.onCreate(ShadowActivityDelegate.kt:146) at com.tencent.shadow.core.runtime.container.PluginContainerActivity.onCreate(PluginContainerActivity.java:84) at android.app.Activity.performCreate(Activity.java:7224) at android.app.Activity.performCreate(Activity.java:7213) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6815) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) Caused by: com.alibaba.android.arouter.exception.HandlerException: ARouter::ARouter init logistics center exception! [com.alibaba.android.arouter.routes.ARouter$$Providers$$libbaidumap] at com.alibaba.android.arouter.core.LogisticsCenter.init(LogisticsCenter.java:208) at com.alibaba.android.arouter.launcher._ARouter.init(_ARouter.java:62) at com.alibaba.android.arouter.launcher.ARouter.init(ARouter.java:41) at com.zzz.myemergencyclientnew.PublishIntellReportActivity.initView(PublishIntellReport.kt:178) at com.zzz.myemergencyclientnew.base.DataBindingActivity.onCreate(DataBindingActivity.java:30) at com.tencent.shadow.core.loader.delegates.ShadowActivityDelegate.onCreate(ShadowActivityDelegate.kt:143) at com.tencent.shadow.core.runtime.container.PluginContainerActivity.onCreate(PluginContainerActivity.java:84) at android.app.Activity.performCreate(Activity.java:7224) at android.app.Activity.performCreate(Activity.java:7213) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6815) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

shifujun commented 4 years ago

ARouter之前有人测过。

如果现在又有问题的话。建议参考 https://github.com/Tencent/Shadow/blob/master/CONTRIBUTING.md#issue

将ARoute接到shadow的source sample里。然后确认在独立安装运行下是能正常工作的。然后把代码库贴在这里,我可以看看插件框架有什么不兼容的问题。

weiwenqiang commented 4 years ago

git我玩的不溜,大佬多包涵,搞了一下午,不知道这个能不能用 https://github.com/weiwenqiang/Shadow/tree/weiwenqiang-aroute

shifujun commented 4 years ago

https://github.com/weiwenqiang/Shadow/commits/weiwenqiang-aroute

我并没有看到你的任何提交。是不是忘push了?

weiwenqiang commented 4 years ago

目前我这个项目在开发中期,时间比较赶有几个问题没有解决,1。是宿主获取插件内Fragment展示,2。是宿主打出来的正式包无法安装,3。华为平板加载插件就闪退了,4。是现在路由初始化冲突

weiwenqiang commented 4 years ago

push了,好了吗?

shifujun commented 4 years ago

https://github.com/weiwenqiang/Shadow/commit/abd0b1d94e92eed7dd3d64022b0123c14c00e195

你看你的这个提交

1,541 changed files with 61,521 additions and 32,703 deletions.

这让人怎么看嘛。

你先改改,可能是要学学git的用法。等检查好提交是正常的再at我。

weiwenqiang commented 4 years ago

好的,为了图省事,直接删除项目代码,把我的项目代码复制过去了。。我现在开发工程就是这样,插件apk仍到Data里,用的宿主不动态的Demo改的AndroidX,不知道我的用法是否正确,也不知道打正式包如何操作,我打的正式包无法安装。。。希望大佬看一下我这个做法的基本路线是否正确?我有点摸黑前进。。。

shifujun commented 4 years ago

你应该先在Shadow的sample中尝试你的应用所需的全部场景。如果有Shadow存在问题的场景,提交最小的改动复现问题。我们现在无法提供服务,但是欢迎交流技术层面的问题。想要保证对Shadow的用法有质量保证,最好的做法就是帮助Shadow补充测试用例,将你的应用的场景添加进来。

weiwenqiang commented 4 years ago

好的,我先花几天,用sample改一遍,尝试一下

Daimhim commented 2 years ago

不知道解决了吗? 我这边的尝试了另一种解决方案,即在插件的Application中手动把插件的路由设置进去。不知道还有其它方案吗?

wanshijie3 commented 2 years ago

好的,为了图省事,直接删除项目代码,把我的项目代码复制过去了。。我现在开发工程就是这样,插件apk仍到Data里,用的宿主不动态的Demo改的AndroidX,不知道我的用法是否正确,也不知道打正式包如何操作,我打的正式包无法安装。。。希望大佬看一下我这个做法的基本路线是否正确?我有点摸黑前进。。。

你好,我运行了你上传的demo,发现arouter在插件中并不能跳转到宿主,只能在插件内部跳转,这种情况在我新写的demo中也确实如此,这个问题之后是否解决了?

Daimhim commented 2 years ago

参考ARouter源码,模仿了其加载原理,你可以在插件的Application执行以下代码初始化插件内的arouter

image

wanshijie3 commented 2 years ago

参考ARouter源码,模仿了其加载原理,你可以在插件的Application执行以下代码初始化插件内的arouter

image

感谢回复,您的这种方式,在插件的Application中手动把插件的路由设置进去,仍然关联不到宿主或者是其他插件的路由啊,无法实现通过arouter 插件A跳转宿主,插件A跳转插件B这种场景,另外请问您代码中的ROUTE_ROOT_PACKAGE只指的宿主包名吗?

Daimhim commented 2 years ago

参考ARouter源码,模仿了其加载原理,你可以在插件的Application执行以下代码初始化插件内的arouter image

感谢回复,您的这种方式,在插件的Application中手动把插件的路由设置进去,仍然关联不到宿主或者是其他插件的路由啊,无法实现通过arouter 插件A跳转宿主,插件A跳转插件B这种场景,另外请问您代码中的ROUTE_ROOT_PACKAGE只指的宿主包名吗?

指的是当前插件的,一般在那执行 指的就是谁,这个目前可以在宿主与插件同进程的情况下使用 不建议跨进程 跨进程还需要额外处理