Android 插件化内功修炼

2018-07-06  本文已影响0人  贾泽宇

在将APP项目插件化时,遇到bug容易一头雾水。其实要想理解插件化技术,首先需要了解Android系统的底层实现。下面是我自己总结学习插件化的知识点。弄懂以下几点,应该对网上各种插件化的框架原理明白个7788了。ps.(Android插件化发展历史,这里有一份插件框架的发展历史小结,感兴趣可以看一下)

第一点:App打包的流程。一次打包操作中途到底经历了什么?资源打包、dex生成、签名等每一步都如何执行?具体过程可以参考Android项目构建流程

第二点:App的安装流程。安装App的这段代码在什么地方?App下载到本地之后,放到哪个目录下?然后会生成哪些文件?如何下载一个增量包?从本地具体哪个位置取出这个包?包的具体命名规则是什么?等等等。。。理解安装过程有助于理解插件化的框架流程和热修复的原理。

第三点:Activity注册和生命周期问题。系统启动Activity,是如何实例化并控制其生命周期的?了解这点是为了弄明白插件框架如何控制Activity的生命周期做铺垫。

第四点是其它讲解Android插件化文章最常提到的,也是插件化框架的重点。

第四点:Dex如何加载和资源冲突解决。插件框架如何把Dex中的类加载到内存?我们需要了解各种Classloader。资源加载冲突怎么解决?这个问题有好几种解决方案。一种是是重写Context的getAsset、getResource之类的方法,偷换概念,让插件读取插件里的资源,但缺点就是宿主和插件的资源id会冲突,需要重写AAPT。另一种是重写AMS中保存的插件列表,从而让宿主和插件分别去加载各自的资源而不会冲突。第三种方法,就是打包后,执行一个脚本,修改生成包中资源id。Small框架就是用的第三种解决办法。

以上就是弄懂插件框架需要的内功修炼,其实安卓插件化从2012年崭露头角,到2015年爆发到现在技术已经趋近成熟,各大公司的项目代码需要插件化的应该早已搭建好自己的框架。工作中也许只需要学会使用公司框架,维护自己模块的代码即可。不过如果对插件化更深层的技术感兴趣,可以按照本文提到的四点,逐一学习,会对理解插件化原理有很大帮助。

上一篇下一篇

猜你喜欢

热点阅读