shifujun

Results 282 comments of shifujun

我还是自己写了一下: https://github.com/shifujun/Shadow/commits/issue553 4个提交。 https://github.com/shifujun/Shadow/commit/4a5874e500f41bff1b043818aefd0ab957414687 是dart代码使用`Image.asset`显示图片。 最后一个提交前,`sample-host`运行效果: ![image](https://user-images.githubusercontent.com/3535204/124443526-554ca100-ddb0-11eb-957c-b901e19df942.png) 最后一个提交把`createPackageContext`return this了,就正常了: ![image](https://user-images.githubusercontent.com/3535204/124443326-2a624d00-ddb0-11eb-89f6-cc69e0dd9a62.png)

你可以在我代码的基础上改一下,看看能不能复现问题。我已经把flutter代码的aar上库了,不用再编译flutter部分了。 跟这个问题相关的只有传给FlutterEngine的context是哪个context的问题。

不是maven的sample。直接在根目录执行`./gradlew :sample-host:assembleDebug`. 你要自己接入到其他项目里的话,可以参考:https://flutter.dev/docs/development/add-to-app/android/project-setup#manual-integration

这部分代码比较简单,建议在复杂场景下自己定制实现。打包代码在`core.gradle-plugin`。对应的解包安装代码在`core.manager`的UnpackManager中。

> MMKV是内存映射,插件和宿主中的内存不是同一份 用代码表达一下吧。

即便是一个Class实例化的两个Object,凭什么修改其中一个另一个就会自动同步变化? 如果你在插件和宿主中各自打包了一份这个Class,它们在运行时就是两个Class了, 其各自实现的单例模式也会各自维护一个实例对象,所以还是两个Object。 看起来你只是需要让插件不要自己打包这个Class,直接依赖宿主中的Class就可以了。 可以参考sample中的这个包中代码: https://github.com/Tencent/Shadow/blob/9f1d8b2d0bedef6a5234e835c52fbf8ecc0eadda/projects/sample/source/sample-plugin/sample-app/build.gradle#L119

大概看了一下你的代码,无关的修改有点多。比如为什么跑去改slidingmenu,又为什么又改了test又改sample。 但我大概是能猜到原因。看起来MyGameView和ConstraintLayout都是宿主中的代码。然后你在插件里的xml中添加了MyGameView。这是不行的。因为ConstraintLayout带有自定义资源,比如`app:layout_constraintTop_toBottomOf`。 所以要构造这种宿主里的View需要用宿主的Context来构造。 View的Context,也就是它的上下文,决定了它该从哪里获取资源,适配什么样的设备环境。插件的宿主的Context主要区别就在于它们的资源来自于不同的apk。xml在inflate时是使用Inflater绑定的context的,所以xml中的view都是同一个context构造的。你可以尝试用代码指定宿主的context构造这个MyGameView,然后再把它添加到xml Inflater出的ViewGroup中。

插件升级逻辑需要你自己写。对于core-manager来说,后安装的插件就是最新版本的。 可以用config.json中的`UUID_NickName`来标记业务版本号: https://github.com/Tencent/Shadow/blob/e7988d6d26d4804d598fc64e5e9e9c852edbb2d2/projects/sdk/core/manager/src/main/java/com/tencent/shadow/core/manager/installplugin/PluginConfig.java#L43-L46 也完全重写core-manager满足自己的需要,重写manager逻辑是不会涉及loader的。

> 通过debug调试发现转换的时候插件activity没有被替换 预期和实际现象描述不清,看不懂。 异常日志说的也只是找不到Activity,如果写错了也没什么奇怪的。 如果描述不清楚问题,建议把代码push上来。https://github.com/Tencent/Shadow/blob/3d8a6d903c0c00ed934a98540af123b7d47e253f/CONTRIBUTING.md#issue

你可以debug一下这两处代码: https://github.com/Tencent/Shadow/blob/7b02667258884fa15e9d40fcb951c63dc46fa051/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/ComponentManager.kt#L162 https://github.com/Tencent/Shadow/blob/7b02667258884fa15e9d40fcb951c63dc46fa051/projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/ComponentManager.kt#L217