深入探索Android热修复技术原理(博文视点出品)pdf下载

深入探索Android热修复技术原理(博文视点出品)百度网盘pdf下载

作者:
简介:深入探索Android热修复技术原理(博文视点出品)
出版社:
出版时间:2018-08
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

产品特色

编辑推荐

适读人群 :移动开发人员。

一个好的热修复技术,将为你的App 助力百倍。本书将让你迅速拥有“驾着飞机修引擎”的能力!

1.热替换代码修复

2.冷启动代码修复

3.资源热修复技术

4.so库热修复技术


内容简介

《深入探索Android热修复技术原理》系统介绍了 Android 热修复的核心技术原理,结合 Sophix 热修复开发实践过程,从代码修复、资源修复、so库修复三大方向进行了详细的技术剖析与解读。

通过《深入探索Android热修复技术原理》,读者会对 Android 热修复技术有更加深刻的认识,对于 Android 系统底层原理的理解和今后的开发工作都有很大帮助。通过阅读《深入探索Android热修复技术原理》,读者可以初步实现一个较为完善的热修复框架。

《深入探索Android热修复技术原理》适合对 Android 热修复技术感兴趣的技术人员阅读,也适合 Android进阶开发者参考。


作者简介

甘晓霖,资深Android软件研发工程师。现就职于阿里巴巴手机淘宝技术团队,花名万壑。曾任职于小米科技有限责任公司MIUI系统组。对Android系统底层机制与架构,尤其是Dalvik/Art虚拟机有着较为深入的研究。已向Android系统源码提交过多个commit,并被Google采纳及并入主分支。阿里Android热修复方案Sophix的主要开发者。


廖斌斌,毕业于重庆大学软件工程专业。阿里巴巴高级无线开发工程师,花名悟二。拥有丰富的Android开发经验,同时热衷研究底层技术栈原理,目前主要在手机淘宝从事无线端SDK研发工作。


杨青,毕业于湖南大学计算机与通信学院计算机科学与技术专业,获硕士学位。历任A8音乐集团、腾讯控股有限公司、阿里巴巴集团的高级程序员、专家、高级专家等职务,在无线互联网领域工作8年以上,拥有MTK、Symbian、PC、WindowsPhone、Android、iOS等多个平台经验。曾参加国家自然科学基金项目,在国内外会议和期刊上发表论文3篇。


精彩书评

2014 年至今,手机淘宝带领了业界 Android 系统组件化和热修复技术的风潮,后来者 Instant App 或多或少地也受到了国内技术的影响。今天看到团队成员将热修复技术认真系统地整理成书,非常欣喜。在这本书中,既能看到对热修复技术发展历史系统深入的总结,又能看到国内程序员在 Android 系统级技术持续突破上做出的不懈努力,更可以看到国内程序员坚持打造优秀专业移动技术产品的雄心壮志!

吴志华(天施)

——手机淘宝基础平台部负责人,阿里巴巴资深技术专家

业内少有的深度讲解Android系统热修复技术的书籍,对于原理、代码讲解得非常清晰和深入,值得Android工程师研读。

倪生华(玄黎)

——手机淘宝基础架构团队负责人,阿里巴巴资深技术专家

应用热修复是一项略带神秘而又颇具争议的技术,但是它的确赋予了应用开发者“驾着飞机修引擎”的能力。本书从Android系统应用热修复技术的原理及代码实现、多种方案进行比较的角度,系统地阐述了Android平台的应用热修复技术。对Android系统应用热修复技术有好奇心的技术人员,这本专题书不容错过。

潘爱民

—计算机技术领域作家,阿里巴巴飞猪事业部首席架构师

2015 年阿里无线在业界首次推出 Android 热修复技术 Dex posed,该技术为 Android 底层技术服务于业务痛点需求指明了一个崭新的方向,掀起了业界百花齐放的探索热潮。Sophix 的发布让我们再次看到了阿里无线在这个技术领域的自我迭代和锐意创新。这是一个技术改变格局的时代,同时也是一个能人辈出的时代!

冯森林

——安卓绿色联盟发起人,手机淘宝前架构师

目录

第1 章 热修复技术介绍 01

1.1 什么是热修复 02

1.2 基本概念 03

1.3 技术积淀 06

1.4 技术概览 08

1.5 本章小结 14

第2 章 热替换代码修复 15

2.1 底层热替换原理 16

2.2 突破底层差异的方法 25

2.3 编译期与语言特性的影响 36

2.4 本章小结 75

第3 章 冷启动代码修复 77

3.1 冷启动类加载原理 78

3.2 多态对冷启动类加载的影响 91

3.3 Dalvik 下完整dex 方案的新探索 99

3.4 入口类与初始化时机的选择 110

3.5 本章小结 119

第4 章 资源热修复技术 121

4.1 普遍的实现方式 122

4.2 资源文件的格式 128

4.3 运行时资源的解析 130

4.4 另辟蹊径的资源修复方案 134

4.5 更优雅地替换AssetManager 139

4.6 一个意料之外的资源问题 143

4.7 本章小结 158

第5 章 so 库热修复技术 159

5.1 so 库加载原理 160

5.2 so 库热部署实时生效的可行性分析 162

5.3 so 库冷部署重启生效实现方案 169

5.4 如何正确复制补丁so 库 173

5.5 本章小结 174

第6 章 其他优秀的热修复方案 175

6.1 Dexposed 浅析 176

6.2 AndFix 探索历程 185

6.3 Amigo 核心解读 193

6.4 腾讯系热修复方案简介 202

第7 章 热修复技术的未来展望 209

7.1 热修复的专业性 210

7.2 对Android 生态的影响 211

7.3 Android 与iOS 热修复的不同 212

7.4 未来,无限可能 213

附录A Sophix 方案比较 215

A.1 Sophix 方案纵向比较 216

A.2 Sophix 方案横向比较 217

精彩书摘

2.3.6 switch case 语句编译

由于在实现资源修复方案热部署的过程中(第4 章将进行详解),要做新旧资源ID 的替换,我们竟然发现存在switch case 语句中的ID 不会被替换掉的情况,所以有必要来探索下switch case 语句编译的特殊性。

(1)switch case 语句编译规则

public void testContinue() {

int temp = 2;

int result = 0;

switch (temp) {

case 1:

result = 1;

break;

case 3:

result = 3;

break;

case 5:

result = 5;

break;

}

}

public void testNotContinue() {

int temp = 2;

int result = 0;

switch (temp) {

case 1:

result = 1;

break;

case 3:

result = 3;

break;

case 10:

result = 10;

}

}

看下testContinue/testNotContinue 方法编译出来有何不同。

# virtual methods

.method public testContinue()V

const/4 v1, 0x2

.local v1, "temp":I

const/4 v0, 0x0

.local v0, "result":I

packed-switch v1, :pswitch_data_0

:pswitch_0

return-void

:pswitch_1

const/4 v0, 0x1

:pswitch_2

const/4 v0, 0x3

:pswitch_3

const/4 v0, 0x5

:pswitch_data_0

.packed-switch 0x1

:pswitch_1

:pswitch_0

:pswitch_2

:pswitch_0

:pswitch_3

.end packed-switch

.end method

.method public testNotContinue()V

const/4 v1, 0x2

.local v1, "temp":I

const/4 v0, 0x0

.local v0, "result":I

sparse-switch v1, :sswitch_data_0

:sswitch_0

const/4 v0, 0x1

:sswitch_1

const/4 v0, 0x3

:sswitch_2

const/16 v0, 0xa

:sswitch_data_0

.sparse-switch

0x1 -> :sswitch_0

0x3 -> :sswitch_1

0xa -> :sswitch_2

.end sparse-switch

.end method

testContinue 方法的switch case 语句被编译成packed-switch 指令,testNotContinue 方法的switch case 语句被编译成sparse-switch 指令。比较两者间的差异,testContinue 的switch 语句的case 项是连续的几个比较相近的值1、3、5。所以被编译为packed-switch 指令,可以看到几个连续的数中间的差值用:pswitch_0 补齐,:pswitch_0 标签处直接return-void。testNotContinue的switch 语句的case 项分别是1、3、10, 很明显不够连续, 所以被编译为sparse-switch 指令。编译器会决定怎样的值才算是连续的case。

(2)热部署解决方案

一个资源ID 肯定是const final static 变量,此时恰好switch case 语句被编译成packed-switch 指令,所以这个时候如果不做任何处理就会存在资源ID替换不完全的情况。解决这种情况方案其实很简单,修改smali 反编译流程,碰到packed-switch 指令强转为sparse-switch 指令,:pswitch_N 等相关标签指令也需要强转为:sswitch_N 指令。然后做资源ID 的暴力替换,然后再回编译smali 为dex。再做类方法变更的检测,所以就需要经过反编译 → 资源 ID替换 → 回编译的过程,这也会使打补丁变得稍慢一些。

前言/序言

随着无线互联网大行其道,经历了Symbian、MTK、iOS、Android、Windows Phone 等各种系统,我们再一次见证了一个个操作系统的兴衰,这些兴衰有如下周期特征。

√萌芽期:平台甫一出现,应用程序和开发者从0到1起步;

√发展期:各领域的应用程序蓬勃发展,伴随黑产的兴起;

√繁荣期:应用程序开始不断繁荣,甚至渴望突破用户态到管态的限制;

√巅峰期:需求与安全领域的融合,对人无我有的追求,带来更多黑科技和动态性能力;

√后期:应用和开发者增量逐步减少,进入平稳发展期或者衰退期。

尽管我们清楚地知道,不是所有平台都能完整经历一个兴衰周期,例如MeeGo,但是可以发现操作系统的每一个发展阶段都缺少不了应用技术的身影,它在其中扮演了不可或缺的角色,而一个平台能真正进入巅峰期的标志是应用技术与安全领域的融合越来越深化。这一现象在各平台(从Windows、Linux 到Android、iOS)上也被多次验证,屡试不爽。以追求动态性修复能力的热修复技术为例,作为安全类技术的标志性衍生物,目前在Android 平台上已大行其道,这也标志着Android 平台进入了巅峰期。

回首过去,Android 热修复技术在2016 年如火如荼,无论是基于Java/JVM 类加载机制的方案,还是利用Android MultiDex的方案,还是对Android 组件偷梁换柱或进行Hook、插件化等方案,无一不体现了应用技术的深化,也无一不蕴含了这样一个事实:开发者从获取快速流量转变为如何更好地维护流量。这意味着开发者的思维和研发模式发生了转变,应用技术的研发已进入游戏的下半程和深水区。我们也的确发现业界出现了各种热修复等动态化技术,它们的立足点或多或少都在强调修复之术的效果,而忽略了一个最基本的前提——产品化的程度,即对开发者接入或使用的各种微妙影响。为解决这一问题,我们从Andfix 这样一个具有特色的技术开始,打造了一个友好的系统性热修复产品,这里既没有对系统组件的偷梁换柱,也没有运行期对补丁构建的大动干戈,还不需要定制编译工具和改变资源的排布,甚至不需要参与APK 的构建。最终提出了一些原创性的发现,并兼具了及时性、无侵入性、高兼容性这三大原则,基本完成了当初做热修复产品的架构设计。

尽管如此,回首技术历史的长河,2016 年不一定会那么显著,但这一年中热修复等动态性技术层出不穷、直播/AR/VR 方兴未艾,都反映出人们对应用技术的追求。而我们在2016 年做出的种种尝试和决策,其结果和影响都将投射到历史的长河中,或许2016年会因为当时各种技术决策而成为一个承上启下的锚点,供未来审视,至少对于Android 热修复领域会是这样,这或许是我们的收获。

读者通过阅读和研究本书的相关内容,能得到Android 热修复的技术全貌,了解各种不同技术的特性和底层原理,还可以获得我们对于热修复技术的思考和解读,更深层次地了解我们对热修复技术本质的剖析,为Android 热修复技术发展尽一份绵薄之力。

杨青

淘宝(中国)软件有限公司

前言

热修复技术,可以看作 Android平台发展成熟至一定阶段的必然产物。随着移动端业务复杂程度的增加,传统的版本更新流程显然无法满足业务和开发者的需求,热修复技术的推出在很大程度上改善了这一局面。热修复技术近年来的飞速发展,尤其是在 InstantRun方案推出后,各种热修复技术百花齐放,国内大部分成熟的主流 App都拥有自己的热更新技术,像手淘、支付宝、微信、QQ、饿了么、美团等。可以说,一个好的热修复技术,将为你的 App助力百倍。对于每一个想在 Android开发领域有所造诣的开发者,掌握热修复技术更是必备的素质。

虽然方案很多,但是深入系统地讲解热修复技术细节的书籍基本没有,市场上国内外的各种 Android书籍大部分只是泛泛地囊括Android开发的基础知识,基本都没有包含热修复技术的章节,最多只是一笔带过。即使有很多开源的热修复方案,要自己硬啃代码还是要花费不少时间和精力。如果只有开源代码就足够的话,为什么还需要这么多技术书籍和文档呢?与其看一个晦涩难懂的项目,不如找一本专业翔实的书,这将会帮助你更系统、全面地理解这项技术涉及的难点与关键点。

出于回馈业界的考虑,我们把阿里移动热修复方案 Sophix开发过程中的技术细节进行了整理归纳,在 2017年 6月发布了《深入探索 Android热修复技术原理》一书的免费电子版,与广大Android开发者进行了分享。

电子版发布以后得到了很好的反响,广大开发者下载如潮,很多读者希望我们能够推出纸质版,来进行更加方便的研读。基于这个呼吁,我们对电子版内容做了认真的整理和校对,对全书内容进行了全面的充实,特此推出这本《深入探索 Android热修复技术原理》。

本书结合了这半年来我们的一些新的探索和思考,特别是对资源修复和冷启动修复技术进行了一些扩充。并新增了一章,全面介绍了其他热修复技术方案,其中特别邀请了 Andfix的作者黎三平(董炼师)与 Amigo的作者曹玉斌(夜沧),来专门为这两大优秀的热修复方案撰写相关章节,里面包含了两位作者分别在支付宝和饿了么的工程开发实践中,对于热修复技术的实际思考和研究,相信读者一定会获益不少。

本书结构

本书各章节是以热修复所涉及的各个技术点进行编排的,结构分明、循序渐进。推荐以章节顺序进行阅读,当然如果对某些方面感兴趣,也可进行跳读。对于日常工作中遇到的问题,也可以通过阅读本书来寻求答案。

第 1章 热修复技术介绍

热修复技术的演进与技术发展,Sophix方案的简介。

第 2章 热替换代码修复

详细解析了底层替换热修复的实现原理。

第 3章 冷启动代码修复

对冷启动修复技术进行了深入的剖析。

第 4章 资源热修复技术

资源修复的技术细节与思考。

第 5章 so库热修复技术

so库修复的探索与实践。

第 6章 其他优秀的热修复方案

介绍了 Android平台上涌现的其他优秀热修复技术方案。

第 7章 热修复技术的未来展望

对于热修复技术未来的畅想与期盼。

你将得到什么

读完本书,你将会对 Android热修复技术有更加深刻的认识,不仅能提高工作效率,而且可加深对系统底层原理的理解,给日常的 Android开发工作带来很大帮助。并且,目前热修复原理还是很多高级 Android技术岗位的面试常客,对付它们你也将得心应手。你还可以通过本书的知识自己初步实现一个较为完善的热修复框架,当然,想直接使用可以访问阿里移动热修复 Sophix官方地址 ①,马上就能够拥有安全可靠的全方位热修复功能。

致谢

Sophix的推出与本书的发行是阿里巴巴许多开发者共同努力的成果,集团技术发展部对于本书的出版提供了极大的支持。

在这里首先要感谢团队领导所为,还有其他共同为 Sophix的研发和推广做出贡献的悟二、查郁、泽胤、潇衍、荻朵,以及之前在百川项目里共同参与热修复项目开发的其他手机淘宝开发者。还要特别感谢阿里云事业部的同学们的合作,是你们提供了强有力的技术支持并不断开拓新市场。

对于本人而言,我还要对前东家小米科技 MIUI部门的各位朋友和前同事表示最诚挚的谢意。我个人的技术成长离不开你们曾经的帮助。

甘晓霖

淘宝(中国)软件有限公司