本书的结构及内容
全书分为三大部分,共22章。第1部分“预备知识”包括第1~5章,是进行Android插件化编程的准备知识。第2部分“解决方案”包括第6~16章,详细介绍并分析了插件化编程的各种解决方案。第3部分“相关技术”包括第17~21章,介绍插件化编程的周边技术,并对纷繁复杂的插件化技术进行了总结。
第1章介绍的是Android插件化的历史,可以当作小说来读,茶余饭后,地铁站中就可以读完。
第2章介绍Android底层知识,涉及那些与Android插件化相关的知识,比如Binder和AIDL, Android App的安装流程和启动流程,ActivityThread, LoadedApk, Android四大组件的运行原理。这一章篇幅较多,需要仔细研读。其中,讲到一个音乐播放器的例子,帮助大家更加深刻地认识Android的四大组件。
第3章讲反射,详细介绍了构造函数、方法、字段、泛型的反射语法。这章介绍了Java领域很火的一个开源库jOOR,可惜,它对Android的支持并不是很好,所以这章还介绍了我们自己封装的RefInvoke类,这个类将贯穿本书,基本上所有源码例子都会使用到它。
第4章讲代理模式。这个模式在Android中最著名的实现就是Proxy.newProxyInstance方法。基于此,我们Hook了AMS和PMS中的一些方法。
第5章是第4章的延续,仍然是基于Proxy.newProxyInstance方法,Hook了Activity的启动流程,从而可以启动一个没有在AndroidManifest中声明的Activity,这是插件化的核心技术之一。
第6章介绍了如何加载插件App,以及如何对插件化项目的宿主App和插件App同时进行调试。说到插件化编程,离不开面向接口编程的思想,这章也花了很多笔墨介绍这个思想,以及具体的代码实现。
第7章介绍了资源的加载机制,包括AssetManager和Resources,并给出了资源的插件化解决方案,从而为Activity的插件化铺平了道路。另外还介绍了换肤技术的插件化实现。
第8章介绍了最简单的插件化解决方案,通过在宿主App的AndroidManifest中事先声明插件中的四大组件。为了能让宿主App随意加载插件的类,这章介绍了合并dex的技术方案。
第9章到第12章介绍了Android四大组件的插件化解决方案。四大组件的生命周期各不相同,所以它们各自的插件化解决方案也都不同。
第13章、第14章介绍了Android插件化的静态代理的解决方案。这是一种“牵线木偶”的思想,我们不用Hook太多Android系统底层的代码。
第15章再次讲到资源,这次要解决的是宿主和多个插件的资源id值冲突的问题。这一章介绍了多种解决方案,包括思路分析、代码示例。
第16章介绍一种古老的插件化解决方案,通过动态替换Fragment的方式。
第17章介绍了App的降级解决方案。一旦插件化方案不可用,那么我们仍然可以使用H5,来替换任何一个App原生页面。
第18章介绍了插件的混淆技术。有时候宿主App和插件App都会引用MyPluginLibrary这个类库,这个公用类库是否要混淆,相应有两种不同的混淆方案。
第19章介绍了增量更新技术。这是插件化必备的技术,从而保证插件的升级,不需要从服务器下载太大的包。
第20章介绍了so的插件化解决方案。这章详细介绍了so的加载原理,以及从服务器动态加载so的方案,基于此,有两种so的插件化解决方案。
第21章介绍了gradle-small这个自定义Gradle插件。这章是对第15章的补充,是另一种解决插件资源id冲突的方案。
第22章作为整本书的结尾,系统总结了Android插件化的各种解决方案。如果读者能坚持读到这最后一章,可以帮助读者巩固这些知识。