Android 插件化内功修炼

在将APP项目插件化时,遇到bug容易一头雾水。其实要想理解插件化技术,首先需要了解Android系统的底层实现。下面是我自己总结学习插件化的知识点。弄懂以下几点,应该对网上各种插件化的框架原理明白个7788了。


第一点:App打包的流程。一次打包操作中途到底经历了什么?资源打包、dex生成、签名等每一步都如何执行?


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


第三点:是App的启动流程。Activity启动有几种方式?一种是写一个startActivity,第二种是点击手机App,通过手机系统里的Launcher机制,启动App里默认的Activity。那么启动原理是什么?启动的时候,main函数在哪里?这个main函数的位置很重要,我们可以对它所在的类做修改,从而实现插件化。


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


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

扫描二维码关注公众号,回复: 1727819 查看本文章


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


猜你喜欢

转载自blog.csdn.net/caibaozixiaobai/article/details/80780991