買這商品的人也買了...
- 
                
                  
                  
                透視 C語言指標-深度探索記憶體管理核心技術 (Understanding and Using C Pointers)$480$379 - 
                
                  
                  
                $474實戰 Java 虛擬機 (JVM 故障診斷與性能優化) - 
                
                  
                  
                $454Linux 設備驅動開發詳解 : 基於最新的 Linux4.0 內核 - 
                
                  
                  
                $414Android 安全技術揭秘與防範 - 
                
                  
                  
                $594深入理解 Android 5 原始程式碼 - 
                
                  
                  
                $354深入理解 Android:WebKit 捲 - 
                
                  
                  
                $414自己動手寫Java虛擬機 - 
                
                  
                  
                $534Docker容器與容器雲(第2版) - 
                
                  
                  
                $534計算機視覺度量深入解析 (Computer Vision Metrics Survey, Taxonomy, and Analysis) - 
                
                  
                  
                Vim 實用技巧, 2/e (Practical Vim : Edit Text at the Speed of Thought, 2/e)$354$336 - 
                
                  
                  
                $294Gradle for Android (簡體中文版) - 
                
                  
                  
                $534Jenkins 權威指南 - 
                
                  
                  
                $352OpenACC 並行編程實戰 - 
                
                  
                  
                $294Vivado 從此開始 - 
                
                  
                  
                $301嵌入式 Linux 與物聯網軟件開發 : C語言內核深度解析 - 
                
                  
                  
                深入理解 Android 內核設計思想, 2/e (上下冊)$948$901 - 
                
                  
                  
                $352程序開發人員測試指南 構建高質量的軟件 - 
                
                  
                  
                $594Android 音視頻開發 - 
                
                  
                  
                軟件調試 第2版 捲1:硬件基礎$708$673 - 
                
                  
                  
                圖形演算法|Apache Spark 與 Neo4j 實務範例 (Graph Algorithms)$580$458 - 
                
                  
                  
                TypeScript 程式設計 (Programming TypeScript)$580$458 - 
                
                  
                  
                全員敏捷|創造快速、彈性與客戶優先的組織 (Agile for Everybody)$400$316 - 
                
                  
                  
                $556Android 進階指北 - 
                
                  
                  
                鏈接器和加載器$474$450 - 
                
                  
                  
                Frida Android SO 逆向深入實踐$894$849 
商品描述
<內容簡介>
Android系統從誕生到現在的短短幾年時間裡,憑藉其易用性和開發的簡潔性,贏得了廣大開發者的支持。在整個Android系統中,Dalvik VM一直是貫穿從底層內核到高層應用開發的核心。本書循序漸進地講解了Android虛擬機系統的基本知識,並剖析了其整個內存系統的進程和運作流程,並對虛擬機系統優化和異常處理的知識進行了詳細講解。本書幾乎涵蓋了Dalvik VM系統的所有主要內容,並且講解方法通俗易懂,特別有利於讀者學習並消化。
本書適合Android初學者、Android底層開發人員、源代碼分析人員和虛擬機開發人員學習,也可以作為大專院校相關專業師生的學習用書和培訓學校的教材。
<章節目錄>
第1章獲取並編譯Android源碼1 
1.1獲取Android源碼1 
1.1.1在Linux系統獲取Android 
源碼1 
1.1.2在Windows平臺獲取Android 
源碼2 
1.1.3 Windows獲取Android L源碼4 
1.2分析Android源碼結構6 
1.3編譯Android源碼8 
1.3.1搭建編譯環境8 
1.3.2開始編譯9 
1.3.3在模擬器中運行10 
1.3.4常見的錯誤分析10 
1.3.5實踐演練—演示兩種編譯Android程序的方法11 
1.4編譯Android Kernel 14 
1.4.1獲取Goldfish內核代碼14 
1.4.2獲取MSM內核代碼17 
1.4.3獲取OMAP內核代碼17 
1.4.4編譯Android的Linux內核17 
第2章Java虛擬機基礎19 
2.1虛擬機的作用19 
2.2 Java虛擬機概述20 
2.2.1 JVM的數據類型20 
2.2.2 Java虛擬機體系結構21 
2.2.3 JVM的生命週期25 
2.3 JVM的安全性26 
2.3.1 JVM的安全模型26 
2.3.2沙箱模型的4種組件27 
2.3.3分析Java的策略機制28 
2.4網絡移動性29 
2.4.1現實需要網絡移動性29 
2.4.2網絡移動性30 
2.5內存異常和垃圾處理31 
2.5.1內存分配中的棧和堆31 
2.5.2運行時的數據區域33 
2.5.3對象訪問34 
2.5.4內存洩露35 
2.5.5 JVM的垃圾收集策略36 
2.5.6垃圾收集器37 
2.6 Java內存模型37 
2.6. 1 Java內存模型概述38 
2.6.2主內存與工作內存38 
2.6.3內存間交互操作39 
第3章Dalvik和ART基礎40 
3.1 Dalvik VM和JVM的差異40 
3.2 Dalvik虛擬機的主要特徵41 
3.3 Dalvik VM架構42 
3.3.1 Dalvik虛擬機的代碼結構42 
3.3.2 dx工具44 
3.3.3 Dalvik VM的進程管理44 
3.3.4 Android的初始化流程44 
3.4 Dalvik VM控制VM命令詳解45 
3.4.1基本命令45 
3.4 .2擴展的JNI檢測45 
3.4.3斷言46 
3.4.4字節碼校驗和優化46 
3.4.5 Dalvik VM的運行模式47 
3.4.6死鎖預測47 
3.4.7 dump堆棧追蹤48 
3.4.8 dex文件和校驗48 
3.4.9產生標誌位48 
3.5 ART機制基礎48 
3.5.1什麼是ART模式48 
3.5.2 ART優化機制基礎50 
第4章分析JNI 52 
4.1 JNI的本質52 
4.2分析Java層54 
4.2 .1加載JNI庫54 
4.2.2實現掃描工作55 
4.2.3讀取並保存信息56 
4.2.4刪除SD卡外的信息58 
4.2.5直接轉向JNI 58 
4.2.6掃描函數scanFile 59 
4.2.7 JNI中的異常處理59 
4.3分析JNI層60 
4.3.1將Native對象的指針保存到
Java對象60 
4.3.2創建Native層的MediaScanner 
對象60 
4.4 Native(本地)層61 
4.4.1註冊JNI函數61 
4.4.2完成註冊工作63 
4.4.3動態註冊64 
4.4.4處理路徑參數65 
4.4.5掃描文件66 
4.4.6添加TAG信息66 
4.4.7總結函數JNI_OnLoad()與函數JNI_OnUnload()的用途67 
4.4.8 Java與JNI基本數據類型
轉換67 
4.4.9 JNIEnv接口69 
4.4.10 JNI中的環境變量70 
第5章分析內存系統71 
5.1分析Android的進程通信機制71 
5.1.1 Android的進程間通信(IPC)
機制Binder 71 
5.1.2 Service Manager是Binder 
機制的上下文管理者72 
5.1.3 Service Manager服務86 
5.2匿名共享內存子系統詳解89 
5.2.1基礎數據結構89 
5.2.2初始化處理90 
5.2.3打開匿名共享內存設備文件91 
5.2.4內存映射93 
5.2.5讀寫操作94 
5.2.6鎖定和解鎖95 
5.2.7回收內存塊100 
5.3 C++訪問接口層詳解101 
5.3.1接口MemoryBase 101 
5.3.2接口MemoryBase 108 
5.4 Java訪問接口層詳解111 
第6章Android程序的生命週期管理115 
6.1 Android程序的生命週期115 
6.1.1進程和線程115 
6.1.2進程的類型116 
6.2 Activity的生命週期116 
6.2.1 Activity的幾種狀態117 
6.2.2分解剖析Activity 117 
6.2.3幾個典型的場景119 
6.2.4管理Activity的生命週期119 
6.2.5 Activity的實例化與啟動120 
6.2.6 Activity的暫停與繼續120 
6.2.7 Activity的關閉/銷毀與
重新運行121 
6.2.8 Activity的啟動模式121 
6.3進程與線程122 
6.3.1進程122 
6.3.2線程123 
6.3.3線程安全的方法123 
6.3.4 Android的線程模型123 
6.4測試生命週期125 
6.5 Service的生命週期129 
6.5.1 Service的基本概念和用途129 
6.5.2 Service的生命週期詳解129 
6.5.3 Service與Activity通信129 
6.6 Android廣播的生命週期133 
6.6.1 Android的廣播機制133 
6.6 .2編寫廣播程序133 
6.7 ART進程管理135 
第7章IPC進程通信機制147 
7.1 Binder機制概述147 
7.2 Service Manager是Binder機制的
上下文管理者148 
7.2.1入口函數148 
7.2.2打開Binder設備文件149 
7.2 .3創建設備文件149 
7.2.4管理內存映射地址空間154 
7.2.5發生通知156 
7.2.6循環等待161 
7.3內存映射162 
7.3.1實現內存分配功能162 
7.3.2分配物理內存164 
7.3.3釋放物理頁面166 
7.3.4分配內核緩衝區167 
7.3.5釋放內核緩衝區168 
7.3.6查詢內核緩衝區170 
第8章init進程詳解171 
8.1 init基礎171 
8.2分析入口函數172 
8.3配置文件詳解174 
8.3. 1 init.rc簡介174 
8.3.2分析init.rc的過程176 
8.4解析service 179 
8.4.1 Zygote對應的service action 179 
8.4.2 init組織service 180 
8.4.3函數parse_service和parse_line_service 181 
8.5字段on 184 
8.5. 1 Zygote對應的on action 184 
8.5.2 init組織on 185 
8.5.3解析on用到的函數186 
8.6在init控制service 186 
8.6.1啟動Zygote 186 
8.6.2啟動service 187 
8.6.3 4種啟動service的方式191 
8.7控制屬性服務194 
8.7.1引入屬性194 
8.7.2初始化屬性服務197 
8.7.3啟動屬性服務197 
8.7.4處理設置屬性的請求200 
第9章Dalvik VM的進程系統202 
9.1 Zygote(孕育)進程詳解202 
9.1.1 Zygote基礎202 
9.1.2分析Zygote的啟動過程203 
9.2 System進程詳解216 
9.2.1啟動System進程前的準備
工作216 
9.2.2分析SystemServer 217 
9.2.3分析EntropyService 220 
9.2.4分析DropBoxManagerService 222 
9.2.5分析DiskStatsService 227 
9.2.6分析DeviceStorageManager Service 231 
9.2.7分析SamplingProfilerService 233 
9.2.8分析ClipboardService 241 
9.3應用程序進程詳解247 
9.3.1創建應用程序247 
9.3.2啟動線程池256 
9.3.3創建信息循環257 
第10章Dalvik VM運作流程詳解259 
10.1 Dalvik VM相關的可執行程序259 
10.1.1 dalvikvm、dvz和app_process 
 簡介259 
10.1.2對比app_process和dalvikvm的
 執行過程260 
10.2初始化Dalvik虛擬機262 
10.2 .1開始虛擬機的準備工作262 
10.2.2初始化跟蹤顯示系統262 
10.2.3初始化垃圾回收器263 
10.2.4初始化線程列表和主線程
 環境參數263 
10.2.5分配內部操作方法的表格
 內存264 
10.2. 6初始化虛擬機的指令碼相關
 的內容264 
10.2.7分配指令寄存器狀態的
 內存264 
10.2.8分配指令寄存器狀態的內存
 和最基本用的Java庫265 
10.2.9初始化使用的Java類庫
 線程類266 
10.2.10初始化虛擬機使用的異常
 Java類庫267 
10.2.11初始化其他對象268 
10.3啟動Zygote 276 
10.3.1在init.rc中配置Zygote啟動
 參數276 
10.3.2啟動Socket服務埠276 
10.3.3加載preload -classes 277 
10.3.4加載preload-resources 277 
10.3.5使用folk啟動新進程278 
10.4啟動SystemServer進程278 
10.4.1啟動各種系統服務線程279 
10.4.2啟動第一個Activity 280 
10.5加載class類文件281 
10.5.1 DexFile在內存中的映射281 
10.5.2 ClassObject—Class在
 加載後的表現形式283 
10.5.3加載Class並生成相應
 ClassObject的函數283 
10.5.4加載基本類庫文件284 
10.5.5加載用戶類文件284 
第11章DEX文件詳解285 
11.1 DEX文件介紹285 
11.2 DEX文件的格式285 
11.2.1 map_list 286 
11.2.2 string_id_item 288 
11.2.3 type_id_item 291 
11.2.4 proto_id_item 292 
11.2.5 ield_id_item 293 
11.2.6 method_id_item 293 
11.2.7 class_def_item 294 
11.3 DEX文件結構297 
11.3.1文件頭(File Header) 297 
11.3.2魔數字段298 
11.3.3檢驗碼字段298 
11.3.4 SHA-1簽名字段300 
11.3.5 map_off字段300 
11.3 .6 string_ids_size和off字段301 
11.4 DEXFile接口詳解303 
11.4.1構造函數303 
11.4.2公共方法304 
11.5 DEX和動態加載類機制306 
11.5.1類加載機制306 
11.5.2具體加載306 
11.5.3代碼加密308 
11.6動態加載jar和DEX 309 
第12章Dvlik VM內存系統詳解310 
12.1如何分配內存310 
12.2內存管理機制詳解312 
12.3優化Dalvik虛擬機的堆內存分配326 
第13章Dalvik VM垃圾收集機制328 
13.1引用計數算法328 
13.2 Mark Sweep算法328 
13.3和垃圾收集算法有關的函數330 
13.4垃圾回收的時機346 
13.5調試信息347 
13.6 Dalvik VM和JVM垃圾收集機制的
 區別348 
第14章Dalvik VM內存優化機制詳解350 
14.1 sp和wp簡介350 
14.1.1 sp基礎350 
14.1.2 wp基礎351 
14.2智能指針詳解351 
14.2.1智能指針基礎352 
14.2.2輕量級指針353 
14.2.3強指針355 
14.2.4弱指針365 
第15章分析Dalvik VM的啟動過程369 
15.1 Dalvik VM啟動流程概覽369 
15.2 Dalvik VM啟動過程詳解370 
15.2.1創建Dalvik VM實例370 
15.2.2指定一系列控制選項371 
15.2.3創建並初始化Dalvik VM 
 實例376 
15.2. 4創建JNIEnvExt對象378 
15.2.5設置當前進程和進程組ID 382 
15.2.6註冊Android核心類的JNI 
 方法382 
15.2.7創建javaCreateThreadEtc 
 鉤子385 
第16章註冊Dalvik VM並創建線程387 
16.1註冊Dalvik VM的JNI方法387 
16.1.1設置加載程序387 
16.1.2加載so文件並驗證387 
16.1.3獲取描述類392 
16.1.4註冊JNI方法392 
16.1.5實現JNI操作394 
16.2創建Dalvik VM進程395 
16.2.1分析底層啟動過程395 
16.2.2創建Dalvik VM進程395 
16.2.3初始化運行的Dalvik VM 398 
16.3創建Dalvik VM線程399 
16.3.1檢查狀態值399 
16.3.2創建線程399 
16.3.3分析啟動過程402 
16.3.4清理線程404 
第17章Dalvik VM異常處理詳解407 
17.1 Java異常處理機制407 
17.1.1方法調用棧407 
17.1.2 Java提供的異常處理類409 
17.2 Java VM異常處理機制詳解409 
17.2.1 Java語言及虛擬機的異常
 處理機制410 
17.2.2 COSIX虛擬機異常處理的
 設計與實現410 
17.3分析Dalvik虛擬機異常處理的
 源碼414 
17.3.1初始化虛擬機使用的異常
 Java類庫414 
17.3.2拋出一個線程異常415 
17.3.3持續拋出進程415 
17.3.4找出異常原因416 
17.3.5找出異常原因417 
17.3.6清除掛起的異常和等待
 初始化的異常420 
17.3.7包裝“現在等待”異常的
 不同例外420 
17.3.8輸出跟蹤當前異常的錯誤
 信息421 
17.3.9搜索和當前異常相匹配的
 方法421 
17.3.10獲取匹配的捕獲塊423 
17.3.11進行堆棧跟蹤424 
17.3.12生成堆棧跟蹤元素425 
17.3. 13將內容添加到堆棧跟蹤
 日誌中426 
17.3.14將內容添加到堆棧跟蹤
 日誌中427 
17.4常見異常的類型與原因428 
17.4.1 SQLException:操作數據庫
 異常類428 
17.4.2 ClassCastException:數據
 類型轉換異常428 
17.4.3 NumberFormatException:
 字符串轉換為數字類型時
 拋出的異常428 
17.5調用堆棧跟蹤分析異常429 
17.5.1解決段錯誤429 
17.5.2跟蹤Android Callback調用
 堆棧431 
第18章JIT編譯434 
18.1 JIT簡介434 
18.1.1 JIT概述434 
18.1.2 Java虛擬機主要的優化
 技術436 
18.1.3 Dalvik中JIT的實現436 
18.2 Dalvik VM對JIT的支持436 
18.3彙編代碼和改動438 
18.3.1彙編部分代碼438 
18.3.2對C文件的改動438 
18.4 Dalvik VM中的JIT源碼439 
18.4.1入口文件439 
18.4.2核心函數447 
18.4.3編譯文件450 
18.4.4 BasicBlock處理458 
18.4.5內存初始化459 
18.4.6對JIT源碼的總結462 
第19章Dalvik VM內存優化463 
19.1 Android內存優化的作用463 
19.2查看Android內存和CPU使用情況464 
19.2.1利用Android API函數查看464 
19.2.2直接對Android文件進行
 解析查詢464 
19.2.3通過Runtime類實現465 
19.2.4使用DDMS工具獲取465 
19.2.5其他方法469 
19.3 Android的內存洩露472 
19.3.1什麼是內存洩漏472 
19.3.2為什麼會發生內存洩露473 
19.3.3 shallow size、retained size 474 
19.3.4查看Android內存洩露的
 工具——MAT 475 
19.3.5查看Android內存洩露的
 方法478 
19.3.6 Android(Java)中常見的容易
 引起內存洩漏的不良代碼480 
19.4常見的引起內存洩露的壞習慣480 
19.4.1查詢數據庫時忘記
 關閉光標481 
19.4.2構造Adapter時不習慣使用
 緩存的convertView 481 
19.4.3沒有及時釋放對象的引用482 
19.4.4不在使用Bitmap對象時調用
 recycle()釋放內存482 
19.5解決內存洩露實踐483 
19.5.1使用MAT根據heap dump分析Java代碼內存洩漏的根源483 
19.5.2演練Android中內存洩露
 代碼優化及檢測489 
第20章Dalvik VM性能優化491 
20.1加載APK/DEX文件優化491 
20.1.1 APK文件介紹492 
20.1.2 DEX文件優化493 
20.1.3使用類動態加載技術實現
 加密優化493 
20.2 SD卡優化496 
20.3虛擬機優化詳解497 
20.3.1平臺優化—ARM的流水線
 技術497 
20.3 .2 Android對C庫優化501 
20.3.3優化創建的進程504 
20.3.4渲染優化504 
第21章分析ART的啟動過程508 
21.1運行環境的轉換508 
21.2運行app_process進程509 
21.3準備啟動512 
21.4創建運行實例518 
21.5註冊本地JNI函數519 
21.6啟動守護進程520 
21.7解析參數521 
21.8初始化類、方法和域528 
第22章執行ART主程序534 
22.1進入main主函數534 
22.2查找目標類535 
22.2.1函數LookupClass() 535 
22.2.2函數DefineClass() 537 
22.2.3函數InsertClass() 540 
22.2.4函數LinkClass() 541 
22.3類操作543 
22.4實現託管操作544 
第23章安裝APK應用程序549 
23.1 PackageManagerService概述549 
23.2主函數main 549 
23.3調用初始化函數550 
23.4創建PackageManagerService服務553 
23.5掃描並解析554 
23.6保存解析信息570 
第24章ART環境安裝APK應用程序572 
24.1 Android安裝APK概述572 
24.2啟動時安裝572 
24.3 ART安裝581 
24.4實現dex2oat轉換586 
24.4.1參數解析586 
24.4.2創建OAT文件指針588 
24.4.3 dex2oat準備工作588 
24.4.4提取classes.dex文件589 
24.4.5創建OAT文件594 
24.5 APK文件的轉換595
