关于Android插件化的细枝末节 [复制链接]

2016-9-7 14:07
MrlLee 阅读:1091 评论:0 赞:0

最近一直在做插件化相关的工作。现在最常见的方案就是来自阿里的 Atlas 和 360 的 DroidPlugin 了。按照我的理解,对于当前的大多数应用来讲,可能 Atlas 会更适合一些,因为它允许插件与宿主之间,甚至是插件之间可以有互动;而 DroidPlugin 的思想会更先进,可想象空间更大一些,理论上它可以启动任何一个第三方应用,比如虚拟化,可参照物就是 LBE 的平行空间。Atlas 并没有开源,DroidPlugin 已开源,我们现在采用的方案是基于 Atlas 的,有兴趣的可以看看 ACDD ,核心思想都是一样。

不管是插件化,还是热补丁,现在的方案都比较多,相应方案在 GitHub 上也都能找得到 demo ,Google 一下,也有不少文章,然而停留在 demo 和文章介绍阶段,始终与实际的生产开发有较大的距离,尤其是大部分文章还只是纸上谈兵,写文章的十之七八恐怕都没有真正的在自己的应用里实践过,而插件化最困难的部分就是实践过程中遇到各种细节和适配问题,还有对当前开发模式的影响也是怎么都绕不过去的问题。下面我大致列一下我们在实践过程中遇到的一些问题。

  1. 插件怎么去引用宿主里的类?
  2. 插件怎么去引用宿主的资源?
  3. 插件化要给每个插件进行资源分段,该如何进行资源分段?
  4. 为了让业务的同学更容易接受,怎么处理宿主的类和资源?
  5. 在引用宿主的资源的时候,默认可用的 context 在插件化里是否依然可用?
  6. 不同的资源类型,引用和处理方式是否相同?
  7. 插件之间共用的一些类,是放在宿主里,还是在插件里开放出接口,该怎么样去考量?
  8. 插件如何去开放接口,让其他插件引用?
  9. 插件开放出了接口,其他插件又该怎样去引用?
  10. 不同的插件都要引用同一个类和同一个资源,类和资源重复了该怎么办?
  11. 加载各个插件时,怎么样知道各个插件的信息?
  12. 插件版本该如何去管理?
  13. 怎样实现 debug 和 release 开发的宿主和插件打包?
  14. 应用启动时要加载那么多插件,怎么加速第一次启动?
  15. 插件引用的宿主的类和资源发生改变,难道每次都要去每个插件里手动修改吗?
  16. 四大组件的免注册是怎么回事?
  17. 四大组件免注册了,是否还需要合并每个插件的 AndroidManifest ?
  18. 在不允许手动拷贝的情况下,如何合并各个插件的 AndroidManifest ?
  19. 宿主的方法数超过 65535 了,该怎么办?
  20. 混淆问题怎么去处理?
  21. 适配,还是适配。

实际操作中,因为对开发的影响是不可避免的,多亏了有 gradle ,通过定制 gradle 脚本,插件,甚至是 SDK 组件,很多事情我们可以做到自动化,当然,凡事有利就有弊,在这个过程中,会发现相当多的正常开发遇不到的 gradle 的『bug』,因此,假如 gradle 玩不转,会有很多麻烦。目前大致能想到的就这么多,以后有想到了再补充吧。


我来说两句
您需要登录后才可以评论 登录 | 立即注册
facelist
所有评论(0)
领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )