簡介:
《Android高級進階》是Android的進階學習指南,主要為Android初中級開發者進階所需的知識,高級開發者也可以從本書中發現很多共鳴點。《Android高級進階》從8個方面對50個知識點進行分類講解,包括基礎篇、系統架構篇、經驗總結篇、新技術篇、性能優化篇、移動安全篇、工具篇、測試篇。熟練掌握這些知識點后,應該就能夠應付實際項目開發中的絕大部分問題了。
android framework書籍,《Android高級進階》的主要目的在于給讀者一個完整的Android中高級開發者知識圖譜。筆者希望通過《Android高級進階》的系統講解,能夠幫助讀者在面試和工作中收獲自己滿意的成績。
豆瓣
1.1 觸摸事件的類型 2
1.2 事件傳遞的三個階段 3
1.3 View的事件傳遞機制 4
1.4 ViewGroup的事件傳遞機制 10
2.1 繪制的整體流程 17
2.2 MeasureSpec17
2.3 Measure19
2.4 Layout22
2.5 Draw22
android開發書籍推薦?3.1 逐幀動畫(Frame Animation) 25
3.1.1 XML 資源文件方式25
3.1.2 代碼方式26
3.2 補間動畫(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 自定義補間動畫34
3.3 屬性動畫(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 過渡動畫(Transition Animation) 40
4.1 Nullness 注解 47
4.2 資源類型注解 48
4.3 類型定義注解 50
4.4 線程注解 52
4.5 RGB 顏色值注解 52
4.6 值范圍注解 53
4.7 權限注解 53
4.8 重寫函數注解 54
4.9 返回值注解 55
4.10 @VisibleForTesting55
4.11 @Keep55
6.1 Snackbar62
6.2 TextInputLayout63
6.3 TabLayout64
6.4 NavigationView65
6.4.1 導航菜單66
6.4.2 導航頭部67
6.5 FloatingActionButton70
6.5.1 使用浮動操作按鈕70
6.5.2 其他選項71
6.5.3 點擊事件71
6.6 CoordinatorLayout72
6.7 CollapsingToolbarLayout73
6.8 BottomSheetBehavior75
7.1 ABI的基本概念 77
7.2 引入預編譯的二進制C/C++ 函數庫 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 文件的注意事項 81
7.4.1 使用高平臺版本編譯的.so 文件運行在低版本的設備上81
7.4.2 混合使用不同的C++ 運行時編譯的.so 文件82
7.4.3 沒有為每個支持的CPU 架構提供對應的.so 文件82
7.4.4 將.so 文件放在錯誤的地方82
7.4.5 只提供armeabi 架構的.so 文件而忽略其他ABIs 的83
c++書籍推薦。8.1 共享變量的定義 85
8.2 通用配置 87
8.3 aar 函數庫的引用 88
8.4 簽名和混淆的配置 90
9.1 Maven Central 和JCenter92
9.1.1 Maven Central 93
9.1.2 JCenter 93
9.2 Android Studio 獲取函數庫的原理 94
9.3 上傳函數庫到JCenter96
9.3.1 步驟一:在Bintray 網站上注冊一個賬號96
9.3.2 步驟二:創建一個Sonatype 賬號96
9.3.3 步驟三:在Bintray 網站使能自動簽名97
9.3.4 步驟四:生成POM 相關的信息100
9.3.5 步驟五:上傳函數庫到Bintray 104
9.3.6 步驟六:發布Bintray 用戶倉庫到JCenter 107
9.3.7 步驟七:同步函數庫到Maven Central 109
10.1 經典的Builder 模式 110
10.2 Builder 模式的變種 113
10.3 變種Builder 模式的自動化生成 119
10.4 開源函數庫的例子 122
11.1 注解的定義 124
11.2 標準注解 125
11.2.1 編譯相關注解125
11.2.2 資源相關注解125
11.2.3 元注解125
11.3 運行時注解 127
11.4 編譯時注解 127
11.4.1 定義注解處理器127
11.4.2 注冊注解處理器131
11.4.3 android-apt插件132
android進階之光第二版pdf,12.1 ANR 產生的原因 135
12.2 典型的ANR 問題場景 135
12.3 ANR 的定位和分析 136
12.3.1 Logcat 日志信息136
12.3.2 traces.txt 日志信息138
12.4 ANR的避免和檢測 141
12.4.1 StrictMode141
12.4.2 BlockCanary 142
13.1 Thread144
13.2 HandlerThread146
13.3 AsyncQueryHandler149
13.4 IntentService150
13.5 Executor Framework153
13.6 AsyncTask155
13.7 Loader156
13.8 總結 159
14.1 Serializable160
14.2 Parcelable166
14.3 SQLiteDatabase169
14.4 SharedPreferences170
14.5 JSON171
14.6 Protocol Buffers及Nano-Proto-Buffers171
14.7 FlatBuffers171
15.1 Java 調用JavaScript173
15.2 JavaScript 調用Java174
c語言進階書籍、16.1 MVP 的基本概念 180
16.2 MVP 與MVC 的區別 181
16.3 MVP 的開源實現 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 其他開源參考實現184
16.4 MVP 的好處 185
16.5 MVP 存在的問題 185
17.1 Data Binding 表達式 187
17.2 數據對象 188
17.3 數據綁定 188
17.4 事件綁定 189
18.1 為何要使用 191
18.2 原理 192
18.3 開源實現 193
18.3.1 EventBus 193
18.3.2 otto 194
18.4 與觀察者模式及Android 廣播的區別 196
19.1 Java 編碼規范 197
19.1.1 源代碼文件的定義197
19.1.2 源代碼文件的結構197
19.1.3 遵循的格式198
19.1.4 命名約定200
19.1.5 Javadoc 200
19.2 Android 命名規范 200
19.2.1 布局文件的命名200
19.2.2 資源文件的命名201
19.2.3 類的命名201
19.3 CheckStyle 的使用 202
安卓開發書籍。20.1 APP 的整體架構 203
20.2 技術選型的考量點 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 數據庫操作能力 210
20.5.1 ActiveAndroid 210
20.5.2 ormlite 211
20.5.3 greenDAO 211
20.5.4 Realm 212
20.6 網絡通信能力 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
21.1 64K 限制的原因 222
21.2 使用MultiDex 解決64K 限制的問題 223
21.2.1 Android 5.0 之前的版本223
21.2.2 Android 5.0 及之后的版本223
21.3 如何避免出現64K 限制 223
21.4 配置MultiDex224
21.5 MultiDex Support Library 的局限性 226
21.6 在開發階段優化MultiDex 的構建 227
22.1 基本概念 231
22.1.1 宿主和插件231
22.1.2 ClassLoader 機制231
22.2 開源框架 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.1 推送的開源實現方案 236
23.1.1 基于XMPP 協議236
23.1.2 基于MQTT 協議236
23.2 推送的第三方平臺 236
23.3 自己實現推送功能 237
23.3.1 長連接的建立(TCPConnectThread)237
23.3.2 數據的發送(TCPSendThread)237
23.3.3 數據的接收(TCPReceiveThread)238
23.3.4 心跳包的實現(TCPHeartBeatThread)240
網絡進階書籍?24.1 APP 為什么變胖了 241
24.2 從APK 文件的結構說起 242
24.3 優化圖片資源占用的空間 245
24.3.1 無損壓縮[ImageOptim] 246
24.3.2 有損壓縮[ImageAlpha] 246
24.3.3 有損壓縮[TinyPNG] 246
24.3.4 PNG/JPEG 轉換為WebP246
24.3.5 盡量使用NinePatch 格式的PNG 圖247
24.4 使用Lint 刪除無用資源 248
24.5 利用Android Gradle 配置 248
24.5.1 minifyEnable248
24.5.2 shrinkResources 249
24.5.3 resConfigs 249
24.5.4 ndk.abiFilters 250
24.6 重構和優化代碼 250
24.7 資源混淆 251
24.8 插件化 251
25.1 Java 層Crash 捕獲機制 253
25.1.1 基本原理253
25.1.2 線程信息254
25.1.3 SharedPreference 信息255
25.1.4 系統設置257
21.1.5 Logcat 中的日志記錄261
25.1.6 自定義Log 文件中的內容264
25.1.7 MemInfo 信息266
25.2 Native 層Crash 捕獲機制 267
25.3 Crash 的上報 269
26.1 代碼的簡化 274
26.2 Operators 簡介 275
27.1 基本概念 277
27.1.1 構造函數注入278
27.1.2 Setter 函數注入279
27.1.3 接口注入279
27.2 為何需要框架 280
27.3 開源框架的選擇 280
27.3.1 ButterKnife 280
27.3.2 RoboGuice 282
27.3.3 Dagger 285
27.3.4 Dagger2 288
27.3.5 框架的對比289
28.1 選擇Kotlin 的原因 290
28.2 Kotlin 的安裝和配置 291
28.3 Kotlin 語言的特性 292
28.3.1 可表達性292
28.3.2 空類型安全294
28.3.3 擴展函數295
28.4 Kotlin 的Gradle 配置 296
28.5 將Java 類轉換成Kotlin 類 299
28.6 相關資料 302
29.1 環境配置 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 開發環境的要求 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 依賴庫修改為本地 314
29.5.1 下載react-native.aar 314
29.5.2 react-native.aar 的文件內容315
29.5.3 Gradle 本地依賴316
29.5.4 將node_modules 上傳到svn/git 318
29.6 React Native 學習建議 319
30.1 在線熱修復的基本流程 320
30.2 Dexposed321
30.2.1 如何集成322
30.2.2 基本用法323
30.2.3 在線熱修復325
30.2.4 平臺的限制328
30.3 AndFix329
30.3.1 如何集成329
30.3.2 補丁包生成工具331
30.3.3 平臺的限制332
30.4 Nuwa332
30.4.1 基本原理332
30.4.2 如何集成333
30.4.3 補丁生成工具334
30.4.4 平臺的限制334
30.5 總結 334
31.1 AOP 的基本概念 335
31.2 代碼織入的時機 336
31.3 基于AspectJ 實現Android 平臺的AOP337
31.3.1 Hugo 的用法簡介337
31.3.2 Hugo 的實現原理339
31.4 其他AOP 開源框架 344
32.1 Buck環境配置 346
32.1.1 Homebrew 方式346
32.1.2 手動構建方式346
32.1.3 安裝Watchman 348
32.1.4 安裝Android SDK 和Android NDK 348
32.2 快速創建基于Buck 構建的Android 工程 349
32.3 Buck 的基本概念 351
32.3.1 構建規則(Build Rule)352
32.3.2 構建目標(Build Target)354
32.3.3 構建文件(Build File)355
32.3.4 構建目標模式(Build Target Pattern)356
32.4 項目改造實戰 357
32.4.1 步驟一:手動下載工程依賴的第三方Jar包或者aar包357
32.4.2 步驟二:將R.* 常量修改為非final 的357
32.4.3 步驟三:創建BUCK 文件358
32.4.4 步驟四:編譯Buck 的buck-android-support 363
32.4.5 步驟五:Exopackage 的使用363
32.5 Buck 的自動化改造 366
33.1 數據結構的選擇 368
33.2 Handler 和內部類的正確用法 370
33.3 正確地使用Context373
33.3.1 Context 的種類374
33.3.2 錯誤使用Context 導致的內存泄漏374
33.3.3 不同Context 的對比376
33.4 掌握Java 的四種引用方式 376
33.5 其他代碼微優化 377
33.5.1 避免創建非必要的對象377
33.5.2 對常量使用static final 修飾378
33.5.3 避免內部的Getters/Setters 378
33.5.4 代碼的重構378
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 無損壓縮ImageOptim 381
34.2.2 有損壓縮ImageAlpha 381
34.2.3 有損壓縮TinyPNG 381
34.2.4 PNG/JPEG 轉換為WebP381
34.2.5 盡量使用NinePatch 格式的PNG 圖382
34.3 圖片的緩存 382
35.1 BroadcastReceiver383
35.2 數據傳輸 384
35.3 位置服務 384
35.4 AlarmManager386
35.5 WakeLock386
36.1 include 標簽共享布局 388
36.2 ViewStub 標簽實現延遲加載 389
36.3 merge 標簽減少布局層次 391
36.4 盡量使用CompoundDrawable392
36.5 使用Lint393
37.1 避免DNS 解析 395
37.2 合并網絡請求 395
37.3 預先獲取數據 396
37.4 避免輪詢 396
37.5 優化重連機制 396
37.6 離線緩存 396
37.7 壓縮數據大小 396
37.8 不同的網絡環境使用不同的超時策略 397
37.9 CDN 的使用 397
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 混淆規則匯總409
38.2 Native(C/C++)代碼的混淆 409
38.3 資源文件的混淆 409
39.1 資源文件的反編譯 411
39.1.1 ApkTool 的安裝411
39.1.2 ApkTool 的使用412
39.2 Java 代碼的反編譯 413
40.1 敏感信息嵌套在strings.xml 中 415
40.2 敏感信息隱藏在Java 源代碼中 415
40.3 敏感信息隱藏在BuildConfig 中 417
40.4 使用DexGuard418
40.5 對敏感信息進行偽裝或者加密 419
40.6 敏感信息隱藏在原生函數庫中(.so文件) 419
40.7 對APK進行加固處理 419
41.1 愛加密的主要功能 421
41.1.1 漏洞分析421
41.1.2 加密服務422
41.1.3 渠道監測423
41.2 常見APP 漏洞及風險 423
41.2.1 靜態破解423
41.2.2 二次打包424
41.2.3 本地儲存數據竊取424
41.2.4 界面截取424
41.2.5 輸入法攻擊424
41.2.6 協議抓取424
41.3 Android 程序反破解技術 424
41.3.1 對抗反編譯424
41.3.2 對抗靜態分析425
41.3.3 對抗動態調試425
41.3.4 防止重編譯425
41.4 加固技術研究知識儲備 426
41.4.1 掌握常見的破解分析工具426
41.4.2 掌握Dalvik 指令集代碼428
41.4.3 掌握Dex 和Odex 文件格式428
41.4.4 掌握Smali 文件格式428
41.4.5 掌握基于Android 的ARM 匯編語言基礎428
42.1 WebView 遠程代碼執行 429
42.2 WebView 密碼明文保存 430
42.3 Android 本地拒絕服務 431
42.3.1 非法序列化對象導致的ClassNotFoundException 431
42.3.2 空Action 導致的NullPointerException 432
42.3.3 強制類型轉換導致的ClassCastException 433
42.3.4 數組越界導致的IndexOutOfBoundsException 433
42.4 SharedPreference 全局任意讀寫 434
42.5 密鑰硬編碼 434
42.6 AES/DES/RSA 弱加密 434
42.7 隨機函數使用錯誤 437
42.8 WebView 忽略SSL 證書 438
42.9 HTTPS 證書弱校驗 438
42.9.1 自定義X509TrustManager 未實現安全校驗438
42.9.2 自定義HostnameVerifier 默認接受所有域名441
42.9.3 SSLSocketFactory 信任所有證書442
42.10 PendingIntent 使用不當 443
43.1 視圖布局監視 447
43.2 數據庫監視 447
43.3 網絡監視 448
43.3.1 網絡模塊使用的是HTTPUrlConnection 449
43.3.2 網絡模塊使用的是OkHttp 452
43.4 dumpapp454
43.4.1 插件的編寫454
43.4.2 插件的集成456
43.4.3 插件的使用456
43.5 Javascript 控制臺 457
43.6 最佳實踐 457
44.1 基本概念 461
44.2 LeakCanary 的集成 461
44.3 LeakCanary 的原理 465
44.4 LeakCanary 的定制 469
44.4.1 RefWatcher 的自定義469
44.4.2 通知頁面樣式的自定義470
44.4.3 內存泄漏堆棧信息保存個數的自定義471
44.4.4 Watcher 的延時471
44.4.5 自定義內存泄漏堆棧信息和heap dump 的處理方式471
44.4.6 忽略特定的弱引用472
44.4.7 不監視特定的Activity 類472
45.1 轉換的時機 474
45.2 管道的思想 475
45.3 減少字節碼的意義 475
45.4 混淆和壓縮 475
45.5 使用內聯函數 476
45.6 無用代碼的消除 477
45.7 Redex 的集成和使用 478
45.7.1 依賴的安裝478
45.7.2 下載,構建和安裝478
45.7.3 使用478
46.1 Annotate479
46.2 .ignore 插件 480
46.3 Live Templates481
46.4 集成Bug 管理系統 482
47.1 Java 單元測試框架JUnit486
47.2 Android 單元測試框架Robolectric 3.0488
47.3 Java 模擬測試框架Mockito490
47.3.1 行為的驗證490
47.3.2 Stub(樁函數)的使用491
48.1 Monkey492
48.2 MonkeyRunner493
48.3 UIAutomator493
48.4 Robotium494
48.5 Espresso494
48.6 Appium494
49.1 Java代碼規范檢查工具CheckStyle495
49.1.1 Gradle方式495
49.1.2 Android Studio插件方式497
49.2 Java靜態代碼分析工具FindBugs498
49.2.1 Gradle方式498
49.2.2 Android Studio插件方式499
49.3 Java靜態代碼分析工具PMD500
49.3.1 Gradle方式500
49.3.2 Android Studio插件方式501
49.4 Android代碼優化工具Lint501
49.4.1 Gradle方式501
49.4.2 Android Studio插件方式502
50.1 Tomcat的下載和啟動 503
50.2 Jenkins的下載和運行 505
50.3 Jenkins插件的安裝 506
50.4 Jenkins全局配置 507
50.4.1 配置JDK 環境507
50.4.2 配置Android SDK 環境507
50.4.3 配置Git 環境508
50.4.4 配置SVN 環境508
50.4.5 配置Gradle 環境508
50.5 JOB相關的操作 508
50.5.1 JOB 的創建508
50.5.2 JOB 的配置509
50.5.3 Gradle 的配置510
50.5.4 構建觸發器的配置511
50.5.5 參數化構建514
50.6 Jenkins預定義的環境變量 514 [1]
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态