Shadow
Shadow copied to clipboard
接入文档召集(易用性)
希望能够加强项目描述,接入指引之类的文档,大片原理看着很爽,但是梳理项目项目做开发或者阅读的时候真的很费劲
Shadow开源的主要目的是分享和交流技术,我们暂时没有精力提供一个易用的服务。并不是我们不感兴趣,只是因为提供这样一个易用的服务并不能给我们自身业务带来太多价值。
目前,我们应该可以针对每一个具体的技术问题进行交流和解答。所以你在阅读或者调试代码时,哪里有问题都可以通过Fork代码、进行修改、提供代码地址、提Issue来交流。针对可以复现问题的代码,交流的效率会非常高。
另外我们非常欢迎共建Shadow,当然也包括项目文档、自动化测试用例、甚至注释。所以也非常欢迎你贡献任何代码或者文档。
此issu 暂不关闭,后续我可能会更新一些易用性文档,由于昨天才开始看此库,所以时间太短,给我点时间; 同时也希望有经验的同学分享下自己的接入经验吧
我来简单写两条吧
1.关于宿主调用白名单配置,manager、loader组件中的位置均为com.tencent.shadow.dynamic.impl.WhiteList#sWhiteList,在插件中的位置为build.gradle打包插件配置里的pluginApks内,字段名为hostWhiteList
2.插件中如果出于构建要求implementation了和宿主中一样的第三方库,那么需要在白名单中配置插件中调用到的这个库的包名,否则会出现类型不匹配
先带来一张 流程图吧, sample 中的,照着这个 图 缕一下,差不多就能明白 主要启动流程 以及 各个module 的作用了,但是我还没写完,只写到 启动占位activity,,最近也是忙=.=

不够完善,见谅,望大佬补充;
实线 依赖, 虚线 compileOnly

年后见
今天有空,画了一下项目的结构。没有画源码级依赖的,因为太麻烦了。maven的更清晰一点。
希望能帮到大家。

https://xiaozhuanlan.com/topic/4251637980 网上找的一篇介绍框架启动插件的整体流程,代码也贴得非常清晰~ 刚开始熟悉Shadow可以看看
希望出一个简易的使用视频,或者简易使用文档
搜索到的一篇PPT,http://www.mianshigee.com/ppt/17991pci/
怎么把宿主的项目和插件的项目分开呢? 现在耦合在一起很难搞呀!!!!
@liupeng110
https://github.com/Tencent/Shadow/tree/master/projects/sample#%E4%BA%8C%E8%BF%9B%E5%88%B6maven%E4%BE%9D%E8%B5%96sdk%E7%9A%84sampleprojectssamplemaven
projects/sample/maven这里面特意演示的就是宿主和插件分开的项目如何接入Shadow的。
host中怎么加载呢
这篇README有介绍的: https://github.com/Tencent/Shadow/tree/master/projects/sample#%E8%BF%90%E8%A1%8C%E6%96%B9%E6%B3%95
@liupeng110 是这样的,Shadow的完整设计是包含动态化插件框架本身的,因此你看到的demo已经是最简单的演示了。
从你的需求描述来看,你可以参考https://github.com/Tencent/Shadow/tree/master/projects/test/none-dynamic 这个测试场景。这个场景测试的就是没有dynamic层的shadow能否正常工作。由于没有dynamic层,插件框架的一切实现都打包在了宿主中,因此会是你所说的只有一个host.apk,它的assets里包含一个plugin.apk的形式。
关于你的其他批评我能理解,欢迎你提PR帮助Shadow优化代码。有一些你认为多余的设计,可能在你实际写代码时就会发现作用了。这篇Issue前面贴的一些图和文章其实能够解答你的疑问。
如果贡献整理文档,是提交md文件的pr嘛 wiki貌似不可以提pr
如果贡献整理文档,是提交md文件的pr嘛 wiki貌似不可以提pr
文档可以先提交到一个单独的issue中,这样是markdown格式的,图片也好上传。代码中可以留一个Issue的链接。这样文档也好编辑和讨论。如果没有图片需要上传到git中,直接在代码的子包中创建README.md也是可以的。
在上面其他人的图的基础上稍微补充了一些描述,如果有错误,麻烦大家帮忙指出一下,我继续修改

@liupeng110 是这样的,Shadow的完整设计是包含动态化插件框架本身的,因此你看到的demo已经是最简单的演示了。
从你的需求描述来看,你可以参考https://github.com/Tencent/Shadow/tree/master/projects/test/none-dynamic 这个测试场景。这个场景测试的就是没有dynamic层的shadow能否正常工作。由于没有dynamic层,插件框架的一切实现都打包在了宿主中,因此会是你所说的只有一个host.apk,它的assets里包含一个plugin.apk的形式。
关于你的其他批评我能理解,欢迎你提PR帮助Shadow优化代码。有一些你认为多余的设计,可能在你实际写代码时就会发现作用了。这篇Issue前面贴的一些图和文章其实能够解答你的疑问。
铁子,思路牛逼,但是想看个简单的源码,真的是难
拜读源码的时候,整理一下source的依赖关系图和插件启动时序图,希望对大家有所帮助。
依赖关系图:

插件启动时序图:

写个插入文档有那么费劲吗?还说"易用的服务"没有什么价值,大大的无语。
对iOSer很不友好😂