搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
深入探索Android热修复技术原理
0.00     定价 ¥ 79.00
图书来源: 浙江图书馆(由JD配书)
此书还可采购22本,持证读者免费借回家
  • 配送范围:
    浙江省内
  • ISBN:
    9787121343896
  • 作      者:
    甘晓霖,廖斌斌,杨青
  • 出 版 社 :
    电子工业出版社
  • 出版日期:
    2018-08-01
收藏
产品特色
编辑推荐

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

1.热替换代码修复

2.冷启动代码修复

3.资源热修复技术

4.so库热修复技术


展开
作者简介

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


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


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


展开
内容介绍

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

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

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


展开
精彩书评

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

吴志华(天施)

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

 

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

倪生华(玄黎)

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

 

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

潘爱民

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

 

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

冯森林

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

展开
精彩书摘

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替换 → 回编译的过程,这也会使打补丁变得稍慢一些。

展开
目录

第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

展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证