Android高級(jí)進(jìn)階是由顧浩鑫所編寫,作者實(shí)戰(zhàn)經(jīng)驗(yàn)非常的豐富,先后任職過(guò)華為、百度、平安科技,本書分為8個(gè)部分進(jìn)行闡述,分別是基礎(chǔ)篇、系統(tǒng)架構(gòu)篇、經(jīng)驗(yàn)總結(jié)篇、新技術(shù)篇、性能優(yōu)化篇、移動(dòng)安全篇、工具篇、測(cè)試篇。
內(nèi)容十分豐富,書中通過(guò)簡(jiǎn)單的代碼示例詳盡地展示了Android開(kāi)發(fā)技巧、還從不同角度對(duì)Android新技術(shù)拋磚引玉,由淺入深,將實(shí)戰(zhàn)中的案例抽象成原型,通俗易懂,有需要的朋友可以下載閱讀。
作者簡(jiǎn)介
顧浩鑫,網(wǎng)絡(luò)ID:ASCEl885,平安金融科技移動(dòng)研發(fā)工程師,目前主要從事Android&ReactNative豐目關(guān)研發(fā)工作,畢業(yè)于華中科技大學(xué)圖像識(shí)別與人工智能研究所,曾先后就職于華為、百度、平安科技。
內(nèi)容簡(jiǎn)介
顧浩鑫所著的《Android高級(jí)進(jìn)階》是Android的進(jìn)階學(xué)習(xí)指南,主要為Android初中級(jí)開(kāi)發(fā)者進(jìn)階所需的知識(shí),高級(jí)開(kāi)發(fā)者也可以從本書中發(fā)現(xiàn)很多共鳴點(diǎn)。本書從8個(gè)方面對(duì)50個(gè)知識(shí)點(diǎn)進(jìn)行分類講解,包括基礎(chǔ)篇、系統(tǒng)架構(gòu)篇、經(jīng)驗(yàn)總結(jié)篇、新技術(shù)篇、 性能優(yōu)化篇、移動(dòng)安全篇、工具篇、測(cè)試篇。
熟練掌握這些知識(shí)點(diǎn)后,應(yīng)該就能夠應(yīng)付實(shí)際項(xiàng)目開(kāi)發(fā)中的大部分問(wèn)題了。本書的主要目的在于給讀者一個(gè)完整的Android中高級(jí)開(kāi)發(fā)者知識(shí)圖譜。筆者希望通過(guò)本書的系統(tǒng)講解,能夠幫助讀者在面試和工作中收獲自己滿意的成績(jī)。
使用說(shuō)明
1、下載并解壓,得出pdf文件
2、如果打不開(kāi)本文件,請(qǐng)務(wù)必下載pdf閱讀器
3、安裝后,在打開(kāi)解壓得出的pdf文件
4、雙擊進(jìn)行閱讀
目錄
第1篇 基礎(chǔ)篇第1章 Android觸摸事件傳遞機(jī)制 2
1.1 觸摸事件的類型 2
1.2 事件傳遞的三個(gè)階段 3
1.3 View的事件傳遞機(jī)制 4
1.4 ViewGroup的事件傳遞機(jī)制 10
第2章 Android View的繪制流程 16
2.1 繪制的整體流程 17
2.2 MeasureSpec 17
2.3 Measure 19
2.4 Layout 22
2.5 Draw 22
第3章 Android 動(dòng)畫機(jī)制 25
3.1 逐幀動(dòng)畫(Frame Animation) 25
3.1.1 XML 資源文件方式 25
3.1.2 代碼方式 26
3.2 補(bǔ)間動(dòng)畫(Tween Animation) 27
3.2.1 插值器Interpolator 27
3.2.2 AlphaAnimation 29
3.2.3 ScaleAnimation 30
3.2.4 TranslateAnimation 31
3.2.5 RotateAnimation 32
3.2.6 自定義補(bǔ)間動(dòng)畫 34
3.3 屬性動(dòng)畫(Property Animation) 34
3.3.1 Evaluator 35
3.3.2 AnimatorSet 36
3.3.3 ValueAnimator 36
3.3.4 ObjectAnimator 38
3.4 過(guò)渡動(dòng)畫(Transition Animation) 40
第4章 Support Annotation Library 使用詳解46
4.1 Nullness 注解 47
4.2 資源類型注解 48
4.3 類型定義注解 50
4.4 線程注解 52
4.5 RGB 顏色值注解 52
4.6 值范圍注解 53
4.7 權(quán)限注解 53
4.8 重寫函數(shù)注解 54
4.9 返回值注解 55
4.10 @VisibleForTesting 55
4.11 @Keep 55
第5章 Percent Support Library使用詳解 57
第6章 Design Support Library使用詳解 62
6.1 Snackbar 62
6.2 TextInputLayout 63
6.3 TabLayout 64
6.4 NavigationView 65
6.4.1 導(dǎo)航菜單 66
6.4.2 導(dǎo)航頭部 67
6.5 FloatingActionButton 70
6.5.1 使用浮動(dòng)操作按鈕 70
6.5.2 其他選項(xiàng) 71
6.5.3 點(diǎn)擊事件 71
6.6 CoordinatorLayout 72
6.7 CollapsingToolbarLayout 73
6.8 BottomSheetBehavior 75
第7章 Android Studio中的NDK開(kāi)發(fā) 77
7.1 ABI的基本概念 77
7.2 引入預(yù)編譯的二進(jìn)制C/C++ 函數(shù)庫(kù) 79
7.3 直接從C/C++ 源碼編譯 79
7.3.1 配置ndk.dir 變量79
7.3.2 在Gradle 中配置NDK 模塊79
7.3.3 添加C/C++ 文件到指定的目錄81
7.4 使用.so 文件的注意事項(xiàng) 81
7.4.1 使用高平臺(tái)版本編譯的.so 文件運(yùn)行在低版本的設(shè)備上 81
7.4.2 混合使用不同的C++ 運(yùn)行時(shí)編譯的.so 文件 82
7.4.3 沒(méi)有為每個(gè)支持的CPU 架構(gòu)提供對(duì)應(yīng)的.so 文件 82
7.4.4 將.so 文件放在錯(cuò)誤的地方 82
7.4.5 只提供armeabi 架構(gòu)的.so 文件而忽略其他ABIs 的 83
第8章 Gradle 必知必會(huì) 85
8.1 共享變量的定義 85
8.2 通用配置 878.3 aar 函數(shù)庫(kù)的引用 88
8.4 簽名和混淆的配置 90
第9章 通過(guò)Gradle打包發(fā)布函數(shù)庫(kù)到JCenter和Maven Central 929.1 Maven Central 和JCenter 92
9.1.1 Maven Central 93
9.1.2 JCenter 93
9.2 Android Studio 獲取函數(shù)庫(kù)的原理 94
9.3 上傳函數(shù)庫(kù)到JCenter 96
9.3.1 步驟一:在Bintray 網(wǎng)站上注冊(cè)一個(gè)賬號(hào) 96
9.3.2 步驟二:創(chuàng)建一個(gè)Sonatype 賬號(hào) 96
9.3.3 步驟三:在Bintray 網(wǎng)站使能自動(dòng)簽名 97
9.3.4 步驟四:生成POM 相關(guān)的信息 100
9.3.5 步驟五:上傳函數(shù)庫(kù)到Bintray 104
9.3.6 步驟六:發(fā)布Bintray 用戶倉(cāng)庫(kù)到JCenter 107
9.3.7 步驟七:同步函數(shù)庫(kù)到Maven Central 109
第10章 Builder模式詳解 110
10.1 經(jīng)典的Builder 模式 110
10.2 Builder 模式的變種 113
10.3 變種Builder 模式的自動(dòng)化生成 119
10.4 開(kāi)源函數(shù)庫(kù)的例子 122
第11章 注解在Android 中的應(yīng)用 124
11.1 注解的定義 124
11.2 標(biāo)準(zhǔn)注解 125
11.2.1 編譯相關(guān)注解 125
11.2.2 資源相關(guān)注解 125
11.2.3 元注解 125
11.3 運(yùn)行時(shí)注解 127
11.4 編譯時(shí)注解 127
11.4.1 定義注解處理器 127
11.4.2 注冊(cè)注解處理器 131
11.4.3 android-apt插件 132
第12章 ANR產(chǎn)生的原因及其定位分析 134
12.1 ANR 產(chǎn)生的原因 135
12.2 典型的ANR 問(wèn)題場(chǎng)景 135
12.3 ANR 的定位和分析 136
12.3.1 Logcat 日志信息136
12.3.2 traces.txt 日志信息138
12.4 ANR的避免和檢測(cè) 141
12.4.1 StrictMode141
12.4.2 BlockCanary 142
第13章 Android異步處理技術(shù) 144
13.1 Thread 144
13.2 HandlerThread 146
13.3 AsyncQueryHandler 149
13.4 IntentService 150
13.5 Executor Framework 153
13.6 AsyncTask 155
13.7 Loader 156
13.8 總結(jié) 159
第14章 Android數(shù)據(jù)序列化方案研究 160
14.1 Serializable 160
14.2 Parcelable 166
14.3 SQLiteDatabase 169
14.4 SharedPreferences 170
14.5 JSON 171
14.6 Protocol Buffers及Nano-Proto-Buffers 171
14.7 FlatBuffers 171
第15章 Android WebView Java 和JavaScript 交互詳解 173
15.1 Java 調(diào)用JavaScript 173
15.2 JavaScript 調(diào)用Java 174
第2篇 系統(tǒng)架構(gòu)篇
第16章 MVP模式及其在Android中的實(shí)踐 180
16.1 MVP 的基本概念 180
16.2 MVP 與MVC 的區(qū)別 181
16.3 MVP 的開(kāi)源實(shí)現(xiàn) 182
16.3.1 Android-Architecture 182
16.3.2 TODO-MVP 182
16.3.3 TODO-MVP-Loaders 183
16.3.4 TODO-MVP-Clean 183
16.3.5 TODO-Databinding 184
16.3.6 其他開(kāi)源參考實(shí)現(xiàn) 184
16.4 MVP 的好處 185
16.5 MVP 存在的問(wèn)題 185
第17章 MVVM模式及Android DataBinding實(shí)戰(zhàn) 186
17.1 Data Binding 表達(dá)式 187
17.2 數(shù)據(jù)對(duì)象 188
17.3 數(shù)據(jù)綁定 188
17.4 事件綁定 189
第18章 觀察者模式的拓展:事件總線 191
18.1 為何要使用 191
18.2 原理 192
18.3 開(kāi)源實(shí)現(xiàn) 193
18.3.1 EventBus 193
18.3.2 otto 194
18.4 與觀察者模式及Android 廣播的區(qū)別 196
第19章 書寫簡(jiǎn)潔規(guī)范的代碼 197
19.1 Java 編碼規(guī)范 197
19.1.1 源代碼文件的定義 197
19.1.2 源代碼文件的結(jié)構(gòu) 197
19.1.3 遵循的格式 198
19.1.4 命名約定 200
19.1.5 Javadoc 200
19.2 Android 命名規(guī)范 200
19.2.1 布局文件的命名 200
19.2.2 資源文件的命名 201
19.2.3 類的命名 201
19.3 CheckStyle 的使用 202
第20章 基于開(kāi)源項(xiàng)目搭建屬于自己的技術(shù)堆棧 203
20.1 APP 的整體架構(gòu) 203
20.2 技術(shù)選型的考量點(diǎn) 205
20.3 日志記錄能力 205
20.4 JSON 解析能力 207
20.4.1 gson 207
20.4.2 jackson 207
20.4.3 Fastjson 208
20.4.4 LoganSquare 208
20.5 數(shù)據(jù)庫(kù)操作能力 210
20.5.1 ActiveAndroid 210
20.5.2 ormlite 211
20.5.3 greenDAO 211
20.5.4 Realm 212
20.6 網(wǎng)絡(luò)通信能力 213
20.6.1 android-async-http 213
20.6.2 OkHttp 215
20.6.3 Volley 216
20.6.4 Retrofit 217
20.7 圖片緩存和顯示能力 217
20.7.1 BitmapFun 218
20.7.2 Picasso 218
20.7.3 Glide 218
20.7.4 Fresco 219
20.7.5 Android-Universal-Image-Loader 219
第3篇 經(jīng)驗(yàn)總結(jié)篇
第21章 64K方法數(shù)限制原理與解決方案222
21.1 64K 限制的原因 222
21.2 使用MultiDex 解決64K 限制的問(wèn)題 223
21.2.1 Android 5.0 之前的版本223
21.2.2 Android 5.0 及之后的版本223
21.3 如何避免出現(xiàn)64K 限制 223
21.4 配置MultiDex 224
21.5 MultiDex Support Library 的局限性 226
21.6 在開(kāi)發(fā)階段優(yōu)化MultiDex 的構(gòu)建 227
第22章 Android 插件框架機(jī)制研究與實(shí)踐 230
22.1 基本概念 231
22.1.1 宿主和插件 231
22.1.2 ClassLoader 機(jī)制 231
22.2 開(kāi)源框架 231
22.2.1 android-pluginmgr 232
22.2.2 dynamic-load-apk 232
22.2.3 DynamicAPK 232
22.2.4 DroidPlugin 233
22.2.5 Small 234
第23章 推送機(jī)制實(shí)現(xiàn)原理詳解 235
23.1 推送的開(kāi)源實(shí)現(xiàn)方案 236
23.1.1 基于XMPP 協(xié)議 236
23.1.2 基于MQTT 協(xié)議 236
23.2 推送的第三方平臺(tái) 236
23.3 自己實(shí)現(xiàn)推送功能 237
23.3.1 長(zhǎng)連接的建立(TCPConnectThread)237
23.3.2 數(shù)據(jù)的發(fā)送(TCPSendThread)237
23.3.3 數(shù)據(jù)的接收(TCPReceiveThread)238
23.3.4 心跳包的實(shí)現(xiàn)(TCPHeartBeatThread)240
第24章 APP 瘦身經(jīng)驗(yàn)總結(jié) 241
24.1 APP 為什么變胖了 241
24.2 從APK 文件的結(jié)構(gòu)說(shuō)起 242
24.3 優(yōu)化圖片資源占用的空間 245
24.3.1 無(wú)損壓縮[ImageOptim] 246
24.3.2 有損壓縮[ImageAlpha] 246
24.3.3 有損壓縮[TinyPNG] 246
24.3.4 PNG/JPEG 轉(zhuǎn)換為WebP246
24.3.5 盡量使用NinePatch 格式的PNG圖 247
24.4 使用Lint 刪除無(wú)用資源 248
24.5 利用Android Gradle 配置 248
24.5.1 minifyEnable 248
24.5.2 shrinkResources 249
24.5.3 resConfigs 249
24.5.4 ndk.abiFilters 250
24.6 重構(gòu)和優(yōu)化代碼 250
24.7 資源混淆 251
24.8 插件化 251
第25章 Android Crash 日志收集原理與實(shí)踐 252
25.1 Java 層Crash 捕獲機(jī)制 253
25.1.1 基本原理 253
25.1.2 線程信息 254
25.1.3 SharedPreference信息 255
25.1.4 系統(tǒng)設(shè)置 257
21.1.5 Logcat 中的日志記錄 261
25.1.6 自定義Log 文件中的內(nèi)容26425.1.7 MemInfo 信息 266
25.2 Native 層Crash 捕獲機(jī)制 267
25.3 Crash 的上報(bào) 269
第4篇 新技術(shù)篇
第26章 函數(shù)式編程思想及其在Android中的應(yīng)用 272
26.1 代碼的簡(jiǎn)化 274
26.2 Operators 簡(jiǎn)介 275
第27章 依賴注入及其在Android中的應(yīng)用 277
27.1 基本概念 277
27.1.1 構(gòu)造函數(shù)注入 278
27.1.2 Setter 函數(shù)注入 279
27.1.3 接口注入 279
27.2 為何需要框架 280
27.3 開(kāi)源框架的選擇 280
27.3.1 ButterKnife 280
27.3.2 RoboGuice 282
27.3.3 Dagger 285
27.3.4 Dagger2 288
27.3.5 框架的對(duì)比 289
第28章 Android世界的Swift:Kotlin在Android中的應(yīng)用 290
28.1 選擇Kotlin 的原因 290
28.2 Kotlin 的安裝和配置 291
28.3 Kotlin 語(yǔ)言的特性 292
28.3.1 可表達(dá)性 292
28.3.2 空類型安全 294
28.3.3 擴(kuò)展函數(shù) 295
28.4 Kotlin 的Gradle配置 296
28.5 將Java 類轉(zhuǎn)換成Kotlin類 299
28.6 相關(guān)資料 302
第29章 React Native For Android入門指南 304
29.1 環(huán)境配置 304
29.1.1 Homebrew 304
29.1.2 nvm 305
29.1.3 Node.js 305
29.1.4 watchman 306
29.1.5 flow 306
29.2 Android 開(kāi)發(fā)環(huán)境的要求 306
29.3 React Native 工程配置 307
29.3.1 安裝react-native 307
29.3.2 生成工程 307
29.4 Android Studio 工程概覽 308
29.5 React Native 依賴庫(kù)修改為本地 314
29.5.1 下載react-native.aar 314
29.5.2 react-native.aar 的文件內(nèi)容315
29.5.3 Gradle 本地依賴 316
29.5.4 將node_modules 上傳到svn/git 318
29.6 React Native 學(xué)習(xí)建議 319
第30章 Android在線熱修復(fù)方案研究 320
30.1 在線熱修復(fù)的基本流程 320
30.2 Dexposed 321
30.2.1 如何集成 322
30.2.2 基本用法 323
30.2.3 在線熱修復(fù) 325
30.2.4 平臺(tái)的限制 328
30.3 AndFix 329
30.3.1 如何集成 329
30.3.2 補(bǔ)丁包生成工具 331
30.3.3 平臺(tái)的限制 332
30.4 Nuwa 332
30.4.1 基本原理 332
30.4.2 如何集成 333
30.4.3 補(bǔ)丁生成工具 334
30.4.4 平臺(tái)的限制 334
30.5 總結(jié) 334
第31章 面向切面編程及其在Android中的應(yīng)用 335
31.1 AOP 的基本概念 335
31.2 代碼織入的時(shí)機(jī) 336
31.3 基于AspectJ 實(shí)現(xiàn)Android 平臺(tái)的AOP 337
31.3.1 Hugo 的用法簡(jiǎn)介 337
31.3.2 Hugo 的實(shí)現(xiàn)原理 339
31.4 其他AOP 開(kāi)源框架 344
第32章 改造Android構(gòu)建系統(tǒng) 345
32.1 Buck環(huán)境配置 346
32.1.1 Homebrew 方式 346
32.1.2 手動(dòng)構(gòu)建方式 346
32.1.3 安裝Watchman 348
32.1.4 安裝Android SDK 和Android NDK 348
32.2 快速創(chuàng)建基于Buck 構(gòu)建的Android 工程 349
32.3 Buck 的基本概念 351
32.3.1 構(gòu)建規(guī)則(Build Rule)352
32.3.2 構(gòu)建目標(biāo)(Build Target)354
32.3.3 構(gòu)建文件(Build File)355
32.3.4 構(gòu)建目標(biāo)模式(Build Target Pattern)356
32.4 項(xiàng)目改造實(shí)戰(zhàn) 357
32.4.1 步驟一:手動(dòng)下載工程依賴的第三方Jar包或者aar包 357
32.4.2 步驟二:將R.* 常量修改為非final的 357
32.4.3 步驟三:創(chuàng)建BUCK 文件 358
32.4.4 步驟四:編譯Buck 的buck-android-support 363
32.4.5 步驟五:Exopackage 的使用 363
32.5 Buck 的自動(dòng)化改造 366
第5篇 性能優(yōu)化篇
第33章 代碼優(yōu)化 368
33.1 數(shù)據(jù)結(jié)構(gòu)的選擇 368
33.2 Handler 和內(nèi)部類的正確用法 370
33.3 正確地使用Context 373
33.3.1 Context 的種類 374
33.3.2 錯(cuò)誤使用Context 導(dǎo)致的內(nèi)存泄漏 374
33.3.3 不同Context 的對(duì)比 376
33.4 掌握J(rèn)ava 的四種引用方式 376
33.5 其他代碼微優(yōu)化 377
33.5.1 避免創(chuàng)建非必要的對(duì)象 377
33.5.2 對(duì)常量使用static final 修飾 378
33.5.3 避免內(nèi)部的Getters/Setters 378
33.5.4 代碼的重構(gòu) 378
第34章 圖片優(yōu)化 379
34.1 圖片的格式 379
34.1.1 JPEG 380
34.1.2 PNG 380
34.1.3 GIF 380
34.1.4 WebP 380
34.2 圖片的壓縮 380
34.2.1 無(wú)損壓縮ImageOptim 381
34.2.2 有損壓縮ImageAlpha 381
34.2.3 有損壓縮TinyPNG 381
34.2.4 PNG/JPEG 轉(zhuǎn)換為Web 381
34.2.5 盡量使用NinePatch 格式的PNG圖 382
34.3 圖片的緩存 382
第35章 電量?jī)?yōu)化 383
35.1 BroadcastReceiver 383
35.2 數(shù)據(jù)傳輸 384
35.3 位置服務(wù) 384
35.4 AlarmManager386
35.5 WakeLock 386
第36章 布局優(yōu)化38836.1 include 標(biāo)簽共享布局 388
36.2 ViewStub 標(biāo)簽實(shí)現(xiàn)延遲加載 389
36.3 merge 標(biāo)簽減少布局層次 391
36.4 盡量使用CompoundDrawable 392
36.5 使用Lint 393
第37章 網(wǎng)絡(luò)優(yōu)化 395
37.1 避免DNS 解析 395
37.2 合并網(wǎng)絡(luò)請(qǐng)求 395
37.3 預(yù)先獲取數(shù)據(jù) 396
37.4 避免輪詢 396
37.5 優(yōu)化重連機(jī)制 396
37.6 離線緩存 396
37.7 壓縮數(shù)據(jù)大小 396
37.8 不同的網(wǎng)絡(luò)環(huán)境使用不同的超時(shí)策略 397
37.9 CDN 的使用 397
第6篇 移動(dòng)安全篇
第38章 Android混淆機(jī)制詳解400
38.1 Java 代碼的混淆 400
38.1.1 Proguard 的特性 401
38.1.2 Proguard 的使能和配置 401
38.1.3 proguard-rules.pro 文件的編寫 404
38.1.4 Proguard 生成的文件 407
38.1.5 Proguard 混淆規(guī)則匯總 409
38.2 Native(C/C++)代碼的混淆 409
38.3 資源文件的混淆 409
第39章 Android 反編譯機(jī)制詳解 411
39.1 資源文件的反編譯 411
39.1.1 ApkTool 的安裝 411
39.1.2 ApkTool 的使用 412
39.2 Java 代碼的反編譯 413
第40章 客戶端敏感信息隱藏技術(shù)研究 414
40.1 敏感信息嵌套在strings.xml中 415
40.2 敏感信息隱藏在Java 源代碼中 415
40.3 敏感信息隱藏在BuildConfig中 417
40.4 使用DexGuard 418
40.5 對(duì)敏感信息進(jìn)行偽裝或者加密 419
40.6 敏感信息隱藏在原生函數(shù)庫(kù)中(.so文件) 419
40.7 對(duì)APK進(jìn)行加固處理 419
第41章 Android 加固技術(shù)研究 421
41.1 愛(ài)加密的主要功能 421
41.1.1 漏洞分析 421
41.1.2 加密服務(wù) 422
41.1.3 渠道監(jiān)測(cè) 423
41.2 常見(jiàn)APP 漏洞及風(fēng)險(xiǎn) 423
41.2.1 靜態(tài)破解 423
41.2.2 二次打包 424
41.2.3 本地儲(chǔ)存數(shù)據(jù)竊取 424
41.2.4 界面截取 424
41.2.5 輸入法攻擊 424
41.2.6 協(xié)議抓取 424
41.3 Android 程序反破解技術(shù) 424
41.3.1 對(duì)抗反編譯 424
41.3.2 對(duì)抗靜態(tài)分析 425
41.3.3 對(duì)抗動(dòng)態(tài)調(diào)試 425
41.3.4 防止重編譯 425
41.4 加固技術(shù)研究知識(shí)儲(chǔ)備 426
41.4.1 掌握常見(jiàn)的破解分析工具 426
41.4.2 掌握Dalvik 指令集代碼 428
41.4.3 掌握Dex 和Odex 文件格式 428
41.4.4 掌握Smali 文件格式 428
41.4.5 掌握基于Android 的ARM 匯編語(yǔ)言基礎(chǔ) 428
第42章 Android安全編碼 429
42.1 WebView 遠(yuǎn)程代碼執(zhí)行 429
42.2 WebView 密碼明文保存 430
42.3 Android 本地拒絕服務(wù) 431
42.3.1 非法序列化對(duì)象導(dǎo)致的ClassNotFoundException 431
42.3.2 空Action 導(dǎo)致的NullPointerException 432
42.3.3 強(qiáng)制類型轉(zhuǎn)換導(dǎo)致的ClassCastException 433
42.3.4 數(shù)組越界導(dǎo)致的IndexOutOfBoundsException 433
42.4 SharedPreference 全局任意讀寫 434
42.5 密鑰硬編碼 434
42.6 AES/DES/RSA 弱加密 434
42.7 隨機(jī)函數(shù)使用錯(cuò)誤 437
42.8 WebView 忽略SSL 證書 438
42.9 HTTPS 證書弱校驗(yàn) 438
42.9.1 自定義X509TrustManager 未實(shí)現(xiàn)安全校驗(yàn) 438
42.9.2 自定義HostnameVerifier 默認(rèn)接受所有域名 441
42.9.3 SSLSocketFactory 信任所有證書 442
42.10 PendingIntent 使用不當(dāng) 443
第7篇 工具篇
第43章 Android調(diào)試工具446
43.1 視圖布局監(jiān)視 447
43.2 數(shù)據(jù)庫(kù)監(jiān)視 447
43.3 網(wǎng)絡(luò)監(jiān)視 448
43.3.1 網(wǎng)絡(luò)模塊使用的是HTTPUrlConnection 449
43.3.2 網(wǎng)絡(luò)模塊使用的是OkHttp 452
43.4 dumpapp 454
43.4.1 插件的編寫 454
43.4.2 插件的集成 456
43.4.3 插件的使用 456
43.5 Javascript 控制臺(tái) 457
43.6 最佳實(shí)踐 457
第44章 內(nèi)存泄漏檢測(cè)函數(shù)庫(kù)LeakCanary 460
44.1 基本概念 461
44.2 LeakCanary 的集成 461
44.3 LeakCanary 的原理 465
44.4 LeakCanary 的定制 469
44.4.1 RefWatcher 的自定義 469
44.4.2 通知頁(yè)面樣式的自定義 470
44.4.3 內(nèi)存泄漏堆棧信息保存?zhèn)€數(shù)的自定義 471
44.4.4 Watcher 的延時(shí) 471
44.4.5 自定義內(nèi)存泄漏堆棧信息和heap dump 的處理方式 471
44.4.6 忽略特定的弱引用 472
44.4.7 不監(jiān)視特定的Activity 類 472
第45章 基于Redex實(shí)現(xiàn)Android APK的壓縮和優(yōu)化 474
45.1 轉(zhuǎn)換的時(shí)機(jī) 474
45.2 管道的思想 475
45.3 減少字節(jié)碼的意義 475
45.4 混淆和壓縮 475
45.5 使用內(nèi)聯(lián)函數(shù) 476
45.6 無(wú)用代碼的消除 477
45.7 Redex 的集成和使用 478
45.7.1 依賴的安裝 478
45.7.2 下載,構(gòu)建和安裝 478
45.7.3 使用 478
第46章 Android Studio你所需要知道的功能 479
46.1 Annotate 479
46.2 .ignore 插件 480
46.3 Live Templates 481
46.4 集成Bug 管理系統(tǒng) 482
第8篇 測(cè)試篇
第47章 Android單元測(cè)試框架簡(jiǎn)介 486
47.1 Java 單元測(cè)試框架JUnit 486
47.2 Android 單元測(cè)試框架Robolectric 3.0 488
47.3 Java 模擬測(cè)試框架Mockito 490
47.3.1 行為的驗(yàn)證 490
47.3.2 Stub(樁函數(shù))的使用 491
第48章 Android UI自動(dòng)化測(cè)試框架簡(jiǎn)介 492
48.1 Monkey 492
48.2 MonkeyRunner 493
48.3 UIAutomator 493
48.4 Robotium 494
48.5 Espresso 494
48.6 Appium 494
第49章 Android靜態(tài)代碼分析實(shí)戰(zhàn) 495
49.1 Java代碼規(guī)范檢查工具CheckStyle 495
49.1.1 Gradle方式 495
49.1.2 Android Studio插件方式 497
49.2 Java靜態(tài)代碼分析工具FindBugs 498
49.2.1 Gradle方式 498
49.2.2 Android Studio插件方式 499
49.3 Java靜態(tài)代碼分析工具PMD 500
49.3.1 Gradle方式 500
49.3.2 Android Studio插件方式 501
49.4 Android代碼優(yōu)化工具Lint 501
49.4.1 Gradle方式 501
49.4.2 Android Studio插件方式 502
第50章 基于Jenkins+Gradle搭建Android持續(xù)集成編譯環(huán)境 503
50.1 Tomcat的下載和啟動(dòng) 503
50.2 Jenkins的下載和運(yùn)行 505
50.3 Jenkins插件的安裝 506
50.4 Jenkins全局配置 507
50.4.1 配置JDK 環(huán)境 507
50.4.2 配置Android SDK 環(huán)境 507
50.4.3 配置Git 環(huán)境 508
50.4.4 配置SVN 環(huán)境 508
50.4.5 配置Gradle 環(huán)境 508
50.5 JOB相關(guān)的操作 508
50.5.1 JOB 的創(chuàng)建 508
50.5.2 JOB 的配置 509
50.5.3 Gradle 的配置 510
50.5.4 構(gòu)建觸發(fā)器的配置 511
50.5.5 參數(shù)化構(gòu)建 514
50.6 Jenkins預(yù)定義的環(huán)境變量 514
- 下載地址
- 本地下載通道:
- 浙江電信下載
- 北京聯(lián)通下載
- 江蘇電信下載
- 廣東電信下載
有問(wèn)題? 點(diǎn)此報(bào)錯(cuò)
發(fā)表評(píng)論
0條評(píng)論軟件排行榜
熱門推薦
- 得間免費(fèi)小說(shuō)電腦版 v5.3.0.372.58M / 簡(jiǎn)體中文
- 有柿電腦版 v11.6.284.23M / 簡(jiǎn)體中文
- cnki全球?qū)W術(shù)快報(bào)電腦版 v1.0.1135.99M / 簡(jiǎn)體中文
- 南方Plus電腦版 v11.9.026.47M / 簡(jiǎn)體中文
- 網(wǎng)易新聞電腦版 v113.197.68M / 簡(jiǎn)體中文
- 京東讀書電腦版 v1.13.4官方版1.98M / 簡(jiǎn)體中文
- 瀟湘書院電腦版 v2.3.11.888官方版49.65M / 簡(jiǎn)體中文
- 數(shù)據(jù)挖掘?qū)д?官方版61.61M / 簡(jiǎn)體中文
- 本草綱目 5.34M / 簡(jiǎn)體中文
- Scala程序設(shè)計(jì)第二版 pdf高清完整版15.83M / 簡(jiǎn)體中文