Android插件化開發指南

Android插件化開發指南

作者: 包建強
出版社: 機械工業
出版在: 2018-01-01
ISBN-13: 9787111603368
ISBN-10: 7111603362
裝訂格式: 平裝-文庫





內容描述


Android插件化技術廣泛應用在移動開發中,通過插件化技術,AndroidApp可以不通過發布新版本而修復線上的bug或者推出新功能,這對於日活千萬的App而言是非常重要的,可極大程度提升App開發效率和質量。
本書詳細介紹了插件化技術的原理、各種方案,及其在AndroidApp中的使用。
在介紹插件化技術的同時,還詳細介紹了Android底層知識,能幫助AndroidApp開發人員更好地掌握Android的開發技術。
本書共22章,先介紹Android插件化技術的歷史和現狀,系統介紹了Android的底層知識以及反射、代理等技術;然後介紹插件化技術的基本知識,包括各類插件化解決方案及其對比;之後分析了一些插件化框架,如that、Zeus等,深入分析了資源及其在插件化中的應用,以及混淆、增量更新等周邊技術的插件化解決方案。


目錄大綱


目錄Contents
 
序一 序二 序三
前言
第一部分預備知識
第1章插件化技術的昨天、今天與明天2 
1.1插件化技術是什麼2 
1.2為什麼需要插件化3 
1.3插件化技術的歷史3 
1.4插件化技術的用途到底是什麼8 
1.5更好的替代品:React Native8 
1.6只有中國這麼玩嗎9 
1.7四大組件都需要插件化技術嗎10 
1.8雙開和虛擬機10 
1.9從原生頁面到HTML 5的過渡11 
1.10本章小結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內部的頁面跳轉32 
2.7 Context家族史34 
2.8 Service工作原理36 
2.8.1在新進程啟動Service36
2.8.2啟動同一進程的Service39 
2.8.3在同一進程綁定Service39 
2.9 BroadcastReceiver工作原理41 
2.9.1註冊過程43 
2.9.2發送廣播的流程44 
2.9.3廣播的種類45 
2.10 ContentProvider工作原理46 
2.10. 1 ContentProvider的本質49 
2.10.2匿名共享內存(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實現一個音樂播放器App59 
2.15.1基於兩個Receiver的音樂播放器59 
2.15.2基於一個Receiver的音樂播放器63 
2.16本章小結68 
第3章反射70 
3.1基本反射技術70 
3.1.1根據一個字符串得到一個類70
3.1.2獲取類的成員71 
3.1.3對泛型類的反射75 
3.2 jOOR77 
3.2.1根據一個字符串得到一個類78 
3.2.2獲取類的成員78 
3.2.3對泛型類的反射79 
3.3對基本反射語法的封裝80 
3.3.1反射出一個構造函數81 
3.3.2調用實例方法81 
3.3.3調用靜態方法82 
3.3.4獲取並設置一個字段的值82 
3.3.5對泛型類的處理83 
3.4對反射的進一步封裝84 
3.5本章小結88 
第4章代理模式89 
4.1概述89 
4.1.1遠程代理(AIDL)90 
4.1.2保護代理(權限控制)92 
4.1.3虛代理(圖片佔位) 92 
4.1.4協作開發(Mock Class)92 
4.1.5給生活加點料(記日誌)93 
4.2靜態代理和動態代理94 
4.3對AMN的Hook95 
4.4對PMS的Hook97 
4.5本章小結98 
第5章對startActivity方法進行Hook99 
5.1 startActivity方法的兩種形式99
5.2對Activity的startActivity方法進行Hook100 
5.2.1方案1:重寫Activity的startActivityForResult方法102 
5.2.2方案2:對Activity的mInstrumentation字段進行Hook102 
5.2.3方案3:對AMN的getDefault方法進行Hook104 
5.2.4方案4:對H類的mCallback字段進行Hook107 
5.2.5方案5:再次對Instrumentation字段進行Hook109 
5.3對Context的startActivity方法進行Hook111 
5.3.1方案6:對ActivityThread的mInstrumentation字段進行Hook111 
5.3.2對AMN的getDafault方法進行Hook是一勞永逸的113 
5.4啟動沒有在AndroidManifest中聲明的Activity113 
5.4.1 “欺騙AMS”的策略分析114 
5.4.2 Hook的上半場115 
5.4.3 Hook的下半場:對H類的mCallback字段進行Hook118 
5.4.4 Hook的下半場:對ActivityThread的mInstrumentation字段進行Hook119 
5.4.5 “欺騙AMS”的弊端121 
5.5本章小結121 
第二部分解決方案
第6章插件化技術基礎知識124
6.1加載外部的dex124 
6.2面向接口編程126 
6.3插件的瘦身129 
6.4對插件進行代碼調試131 
6.5 Application的插件化解決方案133 
6.6本章小結134 
第7章資源初探135 
7.1資源加載機制135 
7.1.1資源分類135 
7.1.2剪不斷理還亂:Resources和AssetManager136 
7.2資源的插件化解決方案137 
7.3換膚141 
7.4殊途同歸:另一種換膚方式149 
7.5本章小結149 
第8章最簡單的插件化解決方案150 
8.1在AndroidManifest中聲明插件中的組件150 
8.2宿主App加載插件中的類151 
8.3啟動插件Service152 
8.4加載插件中的資源152 
8.5本章小結154 
第9章Activity的插件化解決方案155 
9.1啟動沒有在AndroidManifest中聲明的插件Activity155 
9.2基於動態替換的Activity插件化解決方案159 
9.2.1 Android啟動Activity的原理分析159 
9.2.2故意命中緩存160
9.2.3加載插件中類的方案1:為每個插件創建一個ClassLoader164 
9.2.4為了圓一個謊言而編造更多的謊言164 
9.3加載插件中類的方案2:合併多個dex166 
9.4為Activity解決資源問題169 
9.5對LaunchMode的支持169 
9.6加載插件中類的方案3:修改App原生的ClassLoader172 
9.7本章小結174 
第10章Service的插件化解決方案175 
10.1 Android界的荀彧和荀攸:Service和Activity175 
10.2預先佔位176 
10.3 startService的解決方案178 
10.4 bindService的解決方案183 
10.5本章小結185 
第11章BroadcastReceiver的插件化解決方案186


作者介紹


包建強畢業於復旦大學數學系。
先後在多家互聯網公司擔任無線部門技術總監,現在從事區塊鏈技術領域的研究,在Android、iOS、ReactNative等多門無線技術中跋涉過,在App的項目管理上也有多年的實踐經驗。他曾經出版了《App研發錄》,並堅持寫了10年的技術博客




相關書籍

LISP Network Deployment and Troubleshooting: The Complete Guide to LISP Implementation on IOS, IOS-XR, and NX-OS (Networking Technology)

作者 Tarique Shakil Vinit Jain

2018-01-01

Google Android 設計招式之美

作者 高煥堂

2018-01-01

iOS 10 Programming Cookbook

作者 Hossam Ghareeb

2018-01-01