类似推荐
编辑推荐
本书详细介绍了插件化技术的原理、各种方案,及其在Android App中的使用方法。
内容简介
本书在介绍插件化技术的同时,还详细介绍了Android 系统的底层知识,有助于App开发人员深入理解Android系统,从而写出更健壮的代码。全书分为三大部分,共22章。第1部分“预备知识”包括第1~5章,是进行Android插件化编程的准备知识,先介绍Android插件化技术的历史和现状,系统介绍了Android的底层知识以及反射、代理等技术。第2部分“解决方案”包括第6~16章,详细介绍并分析了插件化编程的各种解决方案,以及一些插件化框架的实现原理,如that、Zeus等。第3部分“相关技术”包括第17~21章,介绍插件化编程的周边技术,包括降级、混淆、增量更新等,并对纷繁复杂的插件化技术进行了总结。
作者简介
作者包建强,毕业于复旦大学数学系。先后在多家互联网公司担任无线部门技术总监,现在从事区块链技术领域的研究,在Android、iOS、ReactNative等多门无线技术中跋涉过,在App的项目管理上也有多年的实践经验。他曾出版《App研发录》。
章节目录
版权信息
序一
序二
序三
前言
第一部分 预备知识
第1章 插件化技术的昨天、今天与明天
1.1 插件化技术是什么
1.2 为什么需要插件化
1.3 插件化技术的历史
1.4 插件化技术的用途到底是什么
1.5 更好的替代品:React Native
1.6 只有中国这么玩吗
1.7 四大组件都需要插件化技术吗
1.8 双开和虚拟机
1.9 从原生页面到HTML 5的过渡
1.10 本章小结
第2章 Android底层知识
2.1 概述
2.2 Binder原理
2.3 AIDL原理
2.4 AMS
2.5 Activity工作原理
2.6 App内部的页面跳转
2.7 Context家族史
2.8 Service工作原理
2.9 BroadcastReceiver工作原理
2.10 ContentProvider工作原理
2.11 PMS及App安装过程
2.12 ClassLoader家族史
2.13 双亲委托
2.14 MultiDex
2.15 实现一个音乐播放器App
2.16 本章小结
第3章 反射
3.1 基本反射技术
3.2 jOOR
3.3 对基本反射语法的封装
3.4 对反射的进一步封装
3.5 本章小结
第4章 代理模式
4.1 概述
4.2 静态代理和动态代理
4.3 对AMN的Hook
4.4 对PMS的Hook
4.5 本章小结
第5章 对startActivity方法进行Hook
5.1 startActivity方法的两种形式
5.2 对Activity的startActivity方法进行Hook
5.3 对Context的startActivity方法进行Hook
5.4 启动没有在AndroidManifest中声明的Activity
5.5 本章小结
第二部分 解决方案
第6章 插件化技术基础知识
6.1 加载外部的dex
6.2 面向接口编程
6.3 插件的瘦身
6.4 对插件进行代码调试
6.5 Application的插件化解决方案
6.6 本章小结
第7章 资源初探
7.1 资源加载机制
7.2 资源的插件化解决方案
7.3 换肤
7.4 殊途同归:另一种换肤方式
7.5 本章小结
第8章 最简单的插件化解决方案
8.1 在AndroidManifest中声明插件中的组件
8.2 宿主App加载插件中的类
8.3 启动插件Service
8.4 加载插件中的资源
8.5 本章小结
第9章 Activity的插件化解决方案
9.1 启动没有在AndroidManifest中声明的插件Activity
9.2 基于动态替换的Activity插件化解决方案
9.3 加载插件中类的方案2:合并多个dex
9.4 为Activity解决资源问题
9.5 对LaunchMode的支持
9.6 加载插件中类的方案3:修改App原生的ClassLoader
9.7 本章小结
第10章 Service的插件化解决方案
10.1 Android界的荀彧和荀攸:Service和Activity
10.2 预先占位
10.3 startService的解决方案
10.4 bindService的解决方案
10.5 本章小结
第11章 BroadcastReceiver的插件化解决方案
11.1 Receiver概述
11.2 动态广播的插件化解决方案
11.3 静态广播的插件化解决方案
11.4 静态广播的插件化终极解决方案
11.5 本章小结
第12章 ContentProvider的插件化解决方案
12.1 ContentProvider基本概念
12.2 一个简单的ContentProvider例子
12.3 ContentProvider插件化
12.4 执行这段Hook代码的时机
12.5 ContentProvider的转发机制
12.6 本章小结
第13章 基于静态代理的插件化解决方案:that框架
13.1 静态代理的思想
13.2 一个最简单的静态代理的例子
13.3 插件内部的页面跳转
13.4 从“肉体”上消灭that关键字
13.5 插件向外跳转
13.6 面向接口编程在静态代理中的应用
13.7 对LaunchMode的支持
13.8 本章小结
第14章 that框架对Service和BroadcastReceiver的支持
14.1 静态代理的思想在Service的应用
14.2 对BindService的支持
14.3 Service的预先占位思想
14.4 Service插件化的终极解决方案:动静结合
14.5 静态代理的思想在BroadcastReceiver的应用
14.6 本章小结
第15章 再谈资源
15.1 Android App的打包流程
15.2 修改AAPT
15.3 public.xml固定资源id值
15.4 插件使用宿主的资源
15.5 本章小结
第16章 基于Fragment的插件化框架
16.1 AndroidDynamicLoader概述
16.2 最简单的Fragment插件化例子
16.3 插件内部的Fragment跳转
16.4 从插件的Fragment跳转到插件外部的Fragment
16.5 本章小结
第三部分 相关技术
第17章 降级
17.1 从Activity到HTML 5
17.2 从HTML 5到Activity
17.3 对返回键的支持
17.4 本章小结
第18章 插件的混淆
18.1 插件的基本混淆
18.2 方案1:不混淆公共库MyPluginLibrary
18.3 方案2:混淆公共库MyPluginLibrary
18.4 本章小结
第19章 增量更新
19.1 如何使用增量更新
19.2 制作插件的增量包
19.3 App下载增量包并解压到本地
19.4 App合并增量包
19.5 本章小结
第20章 so的插件化解决方案
20.1 编写一个最简单的so
20.2 使用so
20.3 so的加载原理
20.4 基于System.load的插件化解决方案
20.5 基于System.loadLibrary的插件化解决方案
20.6 本章小结
第21章 对App的打包流程进行Hook
21.1 自定义Gradle插件
21.2 修改resources.arsc
21.3 本章小结
第22章 插件化技术总结
22.1 插件的工程化
22.2 插件中类的加载
22.3 哪些地方可以Hook
22.4 Activity插件化的解决方案
22.5 资源的解决方案
22.6 Fragment是哪门哪派
22.7 Service、ContentProvider、BroadcastReceiver插件化的通用解决方案
22.8 特定于Service的插件化解决方案
22.9 特定于BroadcastReceiver的插件化解决方案
22.10 特定于ContentProvider的插件化解决方案
22.11 本章小结
附录
附录A 常用工具
A.1 Android Studio
A.2 Jadx-GUI
A.3 010 Editor
附录B 本书代码索引
Android插件化开发指南是2018年由机械工业出版社出版,作者包建强。
得书感谢您对《Android插件化开发指南》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。