注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)Android插件化開發(fā)指南

Android插件化開發(fā)指南

Android插件化開發(fā)指南

定 價(jià):¥79.00

作 者: 包建強(qiáng) 著
出版社: 機(jī)械工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購買這本書可以去


ISBN: 9787111603368 出版時(shí)間: 2018-08-01 包裝: 平裝
開本: 16開 頁數(shù): 字?jǐn)?shù):  

內(nèi)容簡介

  本書詳細(xì)介紹了插件化技術(shù)的原理、各種方案,及其在Android App中的使用方法。本書在介紹插件化技術(shù)的同時(shí),還詳細(xì)介紹了Android 系統(tǒng)的底層知識,有助于App開發(fā)人員深入理解Android系統(tǒng),從而寫出更健壯的代碼。 全書分為三大部分,共22章。第1部分“預(yù)備知識”包括第1~5章,是進(jìn)行Android插件化編程的準(zhǔn)備知識,先介紹Android插件化技術(shù)的歷史和現(xiàn)狀,系統(tǒng)介紹了Android的底層知識以及反射、代理等技術(shù)。第2部分“解決方案”包括第6~16章,詳細(xì)介紹并分析了插件化編程的各種解決方案,以及一些插件化框架的實(shí)現(xiàn)原理,如that、Zeus等。第3部分“相關(guān)技術(shù)”包括第17~21章,介紹插件化編程的周邊技術(shù),包括降級、混淆、增量更新等,并對紛繁復(fù)雜的插件化技術(shù)進(jìn)行了總結(jié)。

作者簡介

  包建強(qiáng) 畢業(yè)于復(fù)旦大學(xué)數(shù)學(xué)系。先后在多家互聯(lián)網(wǎng)公司擔(dān)任無線部門技術(shù)總監(jiān),現(xiàn)在從事區(qū)塊鏈技術(shù)領(lǐng)域的研究,在Android、iOS、ReactNative等多門無線技術(shù)中跋涉過,在App的項(xiàng)目管理上也有多年的實(shí)踐經(jīng)驗(yàn)。他曾經(jīng)出版了《App研發(fā)錄》,并有一個(gè)堅(jiān)持寫了10年的技術(shù)博客:http://jax.cnblogs.com/,他的Github地址:https://github.com/BaoBaoJianqiang。

圖書目錄

目錄 Contents
序一
序二
序三
前言
第一部分 預(yù)備知識
第1章 插件化技術(shù)的昨天、今天與明天2
1.1 插件化技術(shù)是什么2
1.2 為什么需要插件化3
1.3 插件化技術(shù)的歷史3
1.4 插件化技術(shù)的用途到底是什么8
1.5 更好的替代品:React Native8
1.6 只有中國這么玩嗎9
1.7 四大組件都需要插件化技術(shù)嗎10
1.8 雙開和虛擬機(jī)10
1.9 從原生頁面到HTML 5的過渡11
1.10 本章小結(jié)12
第2章 Android底層知識13
2.1 概述13
2.2 Binder原理14
2.3 AIDL原理16
2.4 AMS20
2.5 Activity工作原理21
2.5.1 App是怎么啟動的21
2.5.2 啟動App并非那么簡單21
2.6 App內(nèi)部的頁面跳轉(zhuǎn)32
2.7 Context家族史34
2.8 Service工作原理36
2.8.1 在新進(jìn)程啟動Service36
2.8.2 啟動同一進(jìn)程的Service39
2.8.3 在同一進(jìn)程綁定Service39
2.9 BroadcastReceiver工作原理41
2.9.1 注冊過程43
2.9.2 發(fā)送廣播的流程44
2.9.3 廣播的種類45
2.10 ContentProvider工作原理46
2.10.1 ContentProvider的本質(zhì)49
2.10.2 匿名共享內(nèi)存(ASM)49
2.10.3 ContentProvider與AMS的通信流程50
2.11 PMS及App安裝過程52
2.11.1 PMS簡介52
2.11.2 App的安裝流程52
2.11.3 PackageParser53
2.11.4 ActivityThread與PackageManager54
2.12 ClassLoader家族史55
2.13 雙親委托57
2.14 MultiDex57
2.15 實(shí)現(xiàn)一個(gè)音樂播放器App59
2.15.1 基于兩個(gè)Receiver的音樂播放器59
2.15.2 基于一個(gè)Receiver的音樂播放器63
2.16 本章小結(jié)68
第3章 反射70
3.1 基本反射技術(shù)70
3.1.1 根據(jù)一個(gè)字符串得到一個(gè)類70
3.1.2 獲取類的成員71
3.1.3 對泛型類的反射75
3.2 jOOR77
3.2.1 根據(jù)一個(gè)字符串得到一個(gè)類78
3.2.2 獲取類的成員78
3.2.3 對泛型類的反射79
3.3 對基本反射語法的封裝80
3.3.1 反射出一個(gè)構(gòu)造函數(shù)81
3.3.2 調(diào)用實(shí)例方法81
3.3.3 調(diào)用靜態(tài)方法82
3.3.4 獲取并設(shè)置一個(gè)字段的值82
3.3.5 對泛型類的處理83
3.4 對反射的進(jìn)一步封裝84
3.5 本章小結(jié)88
第4章 代理模式89
4.1 概述89
4.1.1 遠(yuǎn)程代理(AIDL)90
4.1.2 保護(hù)代理(權(quán)限控制)92
4.1.3 虛代理(圖片占位)92
4.1.4 協(xié)作開發(fā)(Mock Class)92
4.1.5 給生活加點(diǎn)料(記日志)93
4.2 靜態(tài)代理和動態(tài)代理94
4.3 對AMN的Hook95
4.4 對PMS的Hook97
4.5 本章小結(jié)98
第5章 對startActivity方法進(jìn)行Hook99
5.1 startActivity方法的兩種形式99
5.2 對Activity的startActivity方法進(jìn)行Hook100
5.2.1 方案1:重寫Activity的startActivityForResult方法102
5.2.2 方案2:對Activity的mInstrumentation字段進(jìn)行Hook102
5.2.3 方案3:對AMN的getDefault方法進(jìn)行Hook104
5.2.4 方案4:對H類的mCallback字段進(jìn)行Hook107
5.2.5 方案5:再次對Instrumentation字段進(jìn)行Hook109
5.3 對Context的startActivity方法進(jìn)行Hook111
5.3.1 方案6:對ActivityThread的mInstrumentation字段進(jìn)行Hook111
5.3.2 對AMN的getDafault方法進(jìn)行Hook是一勞永逸的113
5.4 啟動沒有在AndroidManifest中聲明的Activity113
5.4.1 “欺騙AMS”的策略分析114
5.4.2 Hook的上半場115
5.4.3 Hook的下半場:對H類的mCallback字段進(jìn)行Hook118
5.4.4 Hook的下半場:對ActivityThread的mInstrumentation字段進(jìn)行Hook119
5.4.5 “欺騙AMS”的弊端121
5.5 本章小結(jié)121
第二部分 解決方案
第6章 插件化技術(shù)基礎(chǔ)知識124
6.1 加載外部的dex124
6.2 面向接口編程126
6.3 插件的瘦身129
6.4 對插件進(jìn)行代碼調(diào)試131
6.5 Application的插件化解決方案133
6.6 本章小結(jié)134
第7章 資源初探135
7.1 資源加載機(jī)制135
7.1.1 資源分類135
7.1.2 剪不斷理還亂:Resources和AssetManager136
7.2 資源的插件化解決方案137
7.3 換膚141
7.4 殊途同歸:另一種換膚方式149
7.5 本章小結(jié)149
第8章 最簡單的插件化解決方案150
8.1 在AndroidManifest中聲明插件中的組件150
8.2 宿主App加載插件中的類151
8.3 啟動插件Service152
8.4 加載插件中的資源152
8.5 本章小結(jié)154
第9章 Activity的插件化解決方案155
9.1 啟動沒有在AndroidManifest中聲明的插件Activity155
9.2 基于動態(tài)替換的Activity插件化解決方案159
9.2.1 Android啟動Activity的原理分析159
9.2.2 故意命中緩存160
9.2.3 加載插件中類的方案1:為每個(gè)插件創(chuàng)建一個(gè)ClassLoader164
9.2.4 為了圓一個(gè)謊言而編造更多的謊言164
9.3 加載插件中類的方案2:合并多個(gè)dex166
9.4 為Activity解決資源問題169
9.5 對LaunchMode的支持169
9.6 加載插件中類的方案3:修改App原生的ClassLoader172
9.7 本章小結(jié)174
第10章 Service的插件化解決方案175
10.1 Android界的荀彧和荀攸:Service和Activity175
10.2 預(yù)先占位176
10.3 startService的解決方案178
10.4 bindService的解決方案183
10.5 本章小結(jié)185
第11章 BroadcastReceiver的插件化解決方案186
11.1 Receiver概述186
11.2 動態(tài)廣播的插件化解決方案187
11.3 靜態(tài)廣播的插件化解決方案187
11.4 靜態(tài)廣播的插件化終極解決方案189
11.5 本章小結(jié)193
第12章 ContentProvider的插件化解決方案194
12.1 ContentProvider基本概念194
12.2 一個(gè)簡單的ContentProvider例子195
12.3 ContentProvider插件化197
12.4 執(zhí)行這段Hook代碼的時(shí)機(jī)199
12.5 ContentProvider的轉(zhuǎn)發(fā)機(jī)制200
12.6 本章小結(jié)201
第13章 基于靜態(tài)代理的插件化解決方案:that框架202
13.1 靜態(tài)代理的思想202
13.2 一個(gè)最簡單的靜態(tài)代理的例子203
13.2.1 從宿主Activity跳轉(zhuǎn)到插件Activity203
13.2.2 ProxyActivity與插件Activity的通信204
13.2.3 插件Activity的邏輯206
13.3 插件內(nèi)部的頁面跳轉(zhuǎn)206
13.4 從“肉體”上消滅that關(guān)鍵字207
13.5 插件向外跳轉(zhuǎn)209
13.6 面向接口編程在靜態(tài)代理中的應(yīng)用211
13.7 對LaunchMode的支持216
13.8 本章小結(jié)221
第14章 that框架對Service和BroadcastReceiver的支持222
14.1 靜態(tài)代理的思想在Service的應(yīng)用222
14.2 對BindService的支持227
14.3 Service的預(yù)先占位思想229
14.4 Service插件化的終極解決方案:動靜結(jié)合231
14.4.1 解析插件中的Service231
14.4.2 通過反射創(chuàng)建一個(gè)Service對象232
14.4.3 ProxyService與ServiceManager234
14.4.4 bindService的插件化解決方案240
14.5 靜態(tài)代理的思想在BroadcastReceiver的應(yīng)用245
14.6 本章小結(jié)248
第15章 再談資源249
15.1 Android App的打包流程249
15.2 修改AAPT251
15.2.1 修改并生成新的aapt命令251
15.2.2 在插件化項(xiàng)目中使用新的aapt命令254
15.3 public.xml固定資源id值256
15.4 插件使用宿主的資源258
15.5 本章小結(jié)259
第16章 基于Fragment的插件化框架261
16.1 AndroidDynamicLoader概述261
16.2 最簡單的Fragment插件化例子262
16.3 插件內(nèi)部的Fragment跳轉(zhuǎn)263
16.4 從插件的Fragment跳轉(zhuǎn)到插件外部的Fragment264
16.5 本章小結(jié)266
第三部分 相關(guān)技術(shù)
第17章 降級268
17.1 從Activity到HTML 5269
17.2 從HTML 5到Activity273
17.3 對返回鍵的支持278
17.4 本章小結(jié)278
第18章 插件的混淆279
18.1 插件的基本混淆279
18.2 方案1:不混淆公共庫MyPluginLibrary280
18.3 方案2:混淆公共庫MyPluginLibrary282
18.3.1 配置multidex283
18.3.2 配置proguard285
18.3.3 移除Plugin1.apk中的冗余dex286
18.4 本章小結(jié)287
第19章 增量更新288
19.1 如何使用增量更新288
19.2 制作插件的增量包289
19.3 App下載增量包并解壓到本地289
19.4 App合并增量包290
19.5 本章小結(jié)291
第20章 so的插件化解決方案292
20.1 編寫一個(gè)最簡單的so292
20.2 使用so296
20.3 so的加載原理298
20.4 基于System.load的插件化解決方案301
20.5 基于System.loadLibrary的插件化解決方案304
20.6 本章小結(jié)305
第21章 對App的打包流程進(jìn)行Hook306
21.1 自定義Gradle插件306
21.1.1 創(chuàng)建Gradle自定義插件項(xiàng)目306
21.1.2 Extension又是什么308
21.1.3 修改打包流程309
21.2 修改resources.arsc311
21.2.1 Android是怎么查找資源的311
21.2.2 aapt都干了什么312
21.2.3 gradle-small的工作原理313
21.2.4 怎么使用gradle-small313
21.2.5 gradle-small中的Plugin家族313
21.2.6 gradle-small中的Editor家族317
21.3 本章小結(jié)318
第22章 插件化技術(shù)總結(jié)319
22.1 插件的工程化319
22.2 插件中類的加載319
22.3 哪些地方可以Hook320
22.4 Activity插件化的解決方案320
22.5 資源的解決方案321
22.6 Fragment是哪門哪派322
22.7 Service、ContentProvider、BroadcastReceiver插件化的通用解決方案322
22.8 特定于Service的插件化解決方案322
22.9 特定于BroadcastReceiver的插件化解決方案323
22.10 特定于ContentProvider的插件化解決方案323
22.11 本章小結(jié)323
附錄
附錄A 常用工具326
附錄B 本書代碼索引328

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號