Android插件化开发指南

包建强
序一 当接到包老师邀请写序时,我真是受宠若惊。大家都知道,作为一个程序员,写代码拿手那是自然的事情,文字工作实在不是我的强项,但是能给包老师的书写序,实在是荣幸之至,更何况盛情难却呢。 我与包老师相识是在2015年的一个关于DroidPlugin的分享会上,那会儿我还在360公司做手机助手。2014年年底到2015年年初的时候,在公司比较空闲,所以写了一个插件化框架叫DroidPlugin,并在2015年7月份以公司的名义在GitHub上开源了出来,承蒙大家抬爱,在极短的时间内便收获了数千颗星。因为在项目的介绍中我写上了“免修改、免重打包、免安装运行”的宣传语,所以也被一些人冠以“360黑科技”,在知乎上甚至有人认为这是360的什么阴谋。不管是不是什么阴谋,但这个项目让我认识了很多行业中的大牛(包老师就是其中一位),确实是我意料之外的事情。后来跟包老师、任玉刚老师几位经常结成“饭醉团伙”,自然也少不了讨论插件化技术。既然与包老师是因为DroidPlugin开源项目相识,而包老师这本书的内容涉及的很多技术也跟其相关,所以我还是主要介绍一下DroidPlugin项目中的相关技术。 如你所见,那会儿正是插件化技术大热的时候,各大公司也相继开源了自己的插件化框架,但是总结来看,所涉及的技术原理也大同小异。但是DroidPlugin在其中的确算是比较“奇葩”的一个,因为它实际不止是一个插件化框架,更多的算是一个用户态虚拟机,后来大多数的双开软件也都参考了它的源码或者原理。 要在Android上实现免安装、免修改运行一个App,并不是一件容易的事情。因为Android系统设计和权限的限制,我们需要做很多的工作……这跟Docker不一样,虽然都是Linux系统,但在Android上我们不能要求root权限,而Docker则没有这些限制,因此Linux内核提供的namespace、cgr…