android分段加载_想深入了解android动态加载技术,需要掌握什么基本技能?

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

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

插件怎么去引用宿主的资源?

插件化要给每个插件进行资源分段,该如何进行资源分段?

为了让业务的同学更容易接受,怎么处理宿主的类和资源?

在引用宿主的资源的时候,默认可用的 context 在插件化里是否依然可用?

不同的资源类型,引用和处理方式是否相同?

插件之间共用的一些类,是放在宿主里,还是在插件里开放出接口,该怎么样去考量?

插件如何去开放接口,让其他插件引用?

插件开放出了接口,其他插件又该怎样去引用?

不同的插件都要引用同一个类和同一个资源,类和资源重复了该怎么办?

加载各个插件时,怎么样知道各个插件的信息?

插件版本该如何去管理?

怎样实现 debug 和 release 开发的宿主和插件打包?

应用启动时要加载那么多插件,怎么加速第一次启动?

插件引用的宿主的类和资源发生改变,难道每次都要去每个插件里手动修改吗?

四大组件的免注册是怎么回事?

四大组件免注册了,是否还需要合并每个插件的 AndroidManifest ?

在不允许手动拷贝的情况下,如何合并各个插件的 AndroidManifest ?

宿主的方法数超过 65535 了,该怎么办?

混淆问题怎么去处理?

适配,还是适配。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值