Comments (9)
uuid是版本号。一组不同partkey的插件可以协同工作,就可以分配相同的uuid。插件启动在哪个进程,是由PPS和ContainerActivity决定的。这两件事不相关。
manager的代码是动态的,就可以动态的决定从哪一个PPS
启动插件。
from shadow.
en, 我再说详细一点吧,我两个partkey不同,uuid也不同,然后在manager里面给他们分配同一个pps来加载。由于pps里面对之前加载pluginLoader时的uuid做了缓存,所以后面用partkey来加载插件时,第一个先加载的插件是可以的,但加载第二个插件时,由于pps里缓存了第一个插件的uuid,就直接使用第一个插件的uuid去处理了,造成第二个插件找不到。
from shadow.
#929,之前有人提过这个问题,当时的回复确实是同一个进程只能启动相同uuid的插件,想问下这么设计的初衷是什么?如果改成同一个进程启动不同uuid的插件有没有什么问题?
from shadow.
uuid是版本号。关于版本控制都是些通用的设计,没什么特殊的。混合加载不同版本的组件会引起什么问题可以参考一些动态库兼容性方面的资料,都是差不多的。
from shadow.
我们的理解可能有点偏差,应该不涉及到版本控制的问题。比如这里有两个插件,我们没办法控制他们uuid必须一样,他们有各自的版本,但理论上还是应该可以把他们分配到同一个进程。我看现在的设计里同一个进程中的插件uuid必须要统一,为什么不同的插件uuid要一致呢?
from shadow.
你没有提供具体的场景,也许你的插件非常简单,没有版本控制也能正常工作。比如一个插件是计算器,一个插件是相册,那它们就没什么关系嘛。版本不一致也不会显露出什么问题。但这种情况下你也可以把它们版本号设为相同的,也不影响什么。
你要还认为这跟版本控制没关系,就关了issue吧。这个uuid就是版本号。没啥好讨论的了。
from shadow.
你举的这个例子就可以啊,按照你的解释,计算器和相册的版本号每次都要设置一样,否则就没法在同一个进程。但实际开发中,计算器和相册的版本号不可能一直一样吧,比如计算器出问题了,我升级了一个版本,相册没动,那计算器新版本插件下发之后就不能和老版本的相册在同一进程工作了。不知道这个场景,你们怎么处理呢?
from shadow.
版本号可以一直一样,这个uuid又不是编译到插件里的。它只是安装插件时的配置文件内容。怎么组织插件包,怎么管理怎么下发都可以在CI/CD环节处理。
如果相册没有更新,又是完全兼容的,我们给新的uuid的相册分配和旧的uuid的相册同一个相册apk文件就行了。又或者插件都很小,就当相册也更新了,也没什么关系,可以简化逻辑,也是一种选择。
对于运行时的插件系统来说,要有这个uuid来阻止混乱的版本组合一起加载。这是一种基本保障。
你也可以把uuid去掉,也可以开发更复杂的版本号兼容逻辑。自己评估好成本和风险就好了。
from shadow.
了解,谢谢
from shadow.
Related Issues (20)
- 存在转换后被调用方法未实现的问题 getOnBackInvokedDispatcher HOT 2
- gradle8适配 HOT 6
- com.tencent.shadow.plugin 这个插件最大支持的 AGP 和 Gradle 版本分别是多少?还有 compileSdk 版本? HOT 10
- 插件中使用 WorkManager 时启动插件出错 HOT 1
- 线上偶现Rejecting re-init on previously-failed class xxx,NoClassDefFoundError Class not found using the boot class loader; no stack trace available HOT 1
- gradle执行transformClassesWithShadowTransformForPluginDebug任务时卡住 HOT 6
- NoSuchMethodException: com.android.tools.apk.analyzer.BinaryXmlParser.decodeXml 错误 HOT 3
- transformClassesWithShadowTransformForPluginDebug执行时卡住 HOT 1
- Unsupported class loader HOT 2
- 多插件运行时崩溃问题 HOT 10
- PluginLoaderImpl类加载器出现java.lang.LinkageError
- 在插件中使用packageManager.queryIntentActivities(@NonNull Intent intent, int flags) HOT 7
- 使用shadow反射插件资源时出现异常 HOT 2
- onNewIntent可能丢失数据
- 崩溃必现 android.util.SuperNotCalledException: Activity {com.xx.act.DefaultContainerActivity} did not call through to super.onCreate() HOT 1
- 替换add和findFragmentByTag等调用,给插件fragment的tag都加个前缀,是否可行?@shifujun
- 这样开发出来的app能上google play? HOT 1
- 想将android.content.res.TypedArray#getDrawable hook住,但是编译报错 HOT 2
- 插件中SO库更新问题
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from shadow.