posts - 101,  comments - 29,  trackbacks - 0

                  閉關(guān)了四個(gè)多月,整理了博客上所有的Android文章,一共劃分為三大篇,十六個(gè)章節(jié),820頁,系統(tǒng)地分析了Android系統(tǒng)的源代碼,從Linux內(nèi)核層、HAL層、運(yùn)行時(shí)庫(kù)層到應(yīng)用程序框架層。整理期間困難重重,多次想要放棄,但是看到在四個(gè)多月不更新文章的情況下,博客訪問量仍節(jié)節(jié)攀升,從評(píng)論中感受到了網(wǎng)友們的熱情支持,受到了極大的鼓舞,最終堅(jiān)持了下來。現(xiàn)在將整理的內(nèi)容提綱發(fā)表出來,歡迎大家提供建議。

                  整理的內(nèi)容并不是簡(jiǎn)單地復(fù)制了博客上的文章。博客文章由于發(fā)表得比較匆忙,不到六個(gè)月的時(shí)間,一共發(fā)表了50篇原創(chuàng)文章,平均每周發(fā)表兩篇,而且都是利用工作之余時(shí)間來發(fā)表,因此,很多內(nèi)容都不夠全面、深入和細(xì)致。例如,在分析Binder進(jìn)程間通信機(jī)制的一系列博客文章中,并沒有提及到Binder對(duì)象的引用計(jì)數(shù)技術(shù)、死亡通知機(jī)制等重要內(nèi)容,對(duì)Binder驅(qū)動(dòng)中的內(nèi)存管理也分析得不夠系統(tǒng);又如,在分析Android應(yīng)用程序的安裝過程時(shí),沒有提及到系統(tǒng)是如何為應(yīng)用程序分配Linux用戶ID以及Linux用戶組ID。整理的內(nèi)容對(duì)博客文章中不夠全面、學(xué)入和細(xì)致的地方進(jìn)行了相應(yīng)的補(bǔ)充。此外,博客文章也會(huì)出現(xiàn)一些錯(cuò)誤。例如,在《Android應(yīng)用程序鍵盤(Keyboard)消息處理機(jī)制分析》這篇博客文章中,網(wǎng)友@foresee321指出了注冊(cè)系統(tǒng)當(dāng)前激活窗口的過程有誤。整理的內(nèi)容也對(duì)這些錯(cuò)誤作出了修正。博客文章不夠全面、深入、細(xì)致以及有誤的地方不能一一而足,不過它們?cè)谥匦抡淼膬?nèi)容中都得到了解決。

          整理的內(nèi)容從初學(xué)者的角度來組織,由淺入深、自下而上地對(duì)Android系統(tǒng)的源代碼進(jìn)行了分析,目錄結(jié)構(gòu)如下所示:

          第一篇  初識(shí)Android系統(tǒng)...........................................6
              第一章  準(zhǔn)備知識(shí)..............................................7
                  1.1  準(zhǔn)備Linux內(nèi)核基礎(chǔ)知識(shí)................................7
                  1.2  準(zhǔn)備Android應(yīng)用程序基礎(chǔ)知識(shí)..........................8
                  1.3  下載、編譯和運(yùn)行Android源代碼........................8
                      1.3.1  安裝Git工具....................................9
                      1.3.2  安裝Java SDK...................................9
                      1.3.3  安裝其它工具包.................................9
                      1.3.4  安裝repo工具...................................9
                      1.3.5  下載Android源代碼..............................9
                      1.3.6  編譯Android源代碼..............................10
                      1.3.7  運(yùn)行Android模擬器..............................11
                  1.4  下載、編譯和運(yùn)行Android內(nèi)核源代碼....................12
                      1.4.1  下載Android內(nèi)核源代碼..........................12
                      1.4.2  修改Makefile文件...............................13
                      1.4.3  編譯Android內(nèi)核源代碼..........................13
                      1.4.4  運(yùn)行Android模擬器..............................14
                  1.5  開發(fā)第一個(gè)Android應(yīng)用程序............................14
                  1.6  編譯和打包單個(gè)Android應(yīng)用程序模塊....................17
                      1.6.1  導(dǎo)入編譯單個(gè)模塊的mmm命令......................17
                      1.6.2  編譯單個(gè)Android應(yīng)用程序模塊....................18
                      1.6.3  重新打包Android系統(tǒng)鏡像文件....................18
              第二章  硬件抽象層............................................19
                  2.1  開發(fā)Android硬件驅(qū)動(dòng)程序..............................20
                      2.1.1  實(shí)現(xiàn)內(nèi)核驅(qū)動(dòng)程序模塊...........................21
                      2.1.2  修改內(nèi)核Kconfig文件............................27
                      2.1.3  修改內(nèi)核Makefile文件...........................28
                      2.1.4  編譯內(nèi)核驅(qū)動(dòng)程序模塊...........................28
                      2.1.5  驗(yàn)證內(nèi)核驅(qū)動(dòng)程序模塊...........................29
                  2.2  開發(fā)C可執(zhí)行程序驗(yàn)證Android硬件驅(qū)動(dòng)程序...............30
                  2.3  開發(fā)Android硬件抽象層模塊............................32
                      2.3.1  硬件抽象層編寫規(guī)范.............................32
                          2.3.1.1  模塊文件的命令規(guī)范.......................32
                          2.3.1.2  結(jié)構(gòu)體定義規(guī)范...........................33
                      2.3.2  實(shí)現(xiàn)硬件抽象層訪問接口.........................35
                      2.3.3  硬件抽象層模塊加載過程分析.....................39
                      2.3.4  處理硬件設(shè)備訪問權(quán)限問題.......................42
                  2.4  開發(fā)Android硬件訪問服務(wù)..............................44
                      2.4.1  定義硬件訪問服務(wù)接口...........................44
                      2.4.2  實(shí)現(xiàn)硬件訪問服務(wù)...............................45
                      2.4.3  實(shí)現(xiàn)硬件訪問服務(wù)的Java 本地接口方法............46
                      2.4.4  啟動(dòng)硬件訪問服務(wù)...............................49
                  2.5  開發(fā)Android應(yīng)用程序來調(diào)用硬件訪問服務(wù)................50
              第三章  智能指針..............................................55
                  3.1  輕量級(jí)指針...........................................57
                      3.1.1  實(shí)現(xiàn)原理分析...................................57
                      3.1.2  使用實(shí)例分析...................................59
                  3.2  強(qiáng)指針和弱指針.......................................61
                      3.2.1  強(qiáng)指針的實(shí)現(xiàn)原理分析...........................61
                      3.2.2  弱指針的實(shí)現(xiàn)原理分析...........................68
                      3.2.3  強(qiáng)指針和弱指針的使用實(shí)例分析...................74
          第二篇  Android專用驅(qū)動(dòng)系統(tǒng).......................................79
              第四章  Logger日志系統(tǒng)........................................80
                  4.1  Logger驅(qū)動(dòng)程序.......................................83
                      4.1.1  相關(guān)數(shù)據(jù)結(jié)構(gòu)...................................83
                      4.1.2  設(shè)備初始化過程.................................85
                      4.1.3  設(shè)備文件打開過程...............................90
                      4.1.4  日志讀取過程...................................91
                      4.1.5  日志寫入過程...................................95
                  4.2  運(yùn)行時(shí)日志庫(kù)寫入接口.................................100
                  4.3  C/C++日志寫入接口....................................106
                  4.4  Java日志寫入接口.....................................110
                  4.5  Logcat工具分析.......................................116
                      4.5.1  相關(guān)數(shù)據(jù)結(jié)構(gòu)...................................117
                      4.5.2  初始化過程.....................................121
                      4.5.3  日志讀取過程...................................133
                      4.5.4  日志輸出過程...................................137
              第五章  Binder進(jìn)程間通信系統(tǒng)..................................149
                  5.1  Binder驅(qū)動(dòng)程序.......................................151
                      5.1.1  相關(guān)數(shù)據(jù)結(jié)構(gòu)...................................152
                      5.1.2  設(shè)備初始化過程.................................172
                      5.1.3  設(shè)備文件打開過程...............................173
                      5.1.4  設(shè)備文件內(nèi)存映射過程...........................174
                      5.1.5  內(nèi)核緩沖區(qū)管理.................................181
                          5.1.5.1  分配內(nèi)核緩沖區(qū)...........................181
                          5.1.5.2  釋放內(nèi)核緩沖區(qū)...........................187
                          5.1.5.3  查詢內(nèi)核緩沖區(qū)...........................192
                  5.2  Binder進(jìn)程間通信庫(kù)...................................193
                  5.3  Binder進(jìn)程間通信應(yīng)用實(shí)例.............................197
                  5.4  Binder對(duì)象引用計(jì)數(shù)技術(shù)...............................205
                      5.4.1  Binder本地對(duì)象的生命周期.......................206
                      5.4.2  Binder實(shí)體對(duì)象的生命周期.......................210
                      5.4.3  Binder引用對(duì)象的生命周期.......................213
                      5.4.4  Binder代理對(duì)象的生命周期.......................218
                  5.5  Binder對(duì)象死亡通知機(jī)制...............................221
                      5.5.1  注冊(cè)死亡接收通知...............................221
                      5.5.2  發(fā)送死亡接收通知...............................225
                      5.5.3  注銷死亡接收通知...............................229
                  5.6  Service Manager的啟動(dòng)過程............................232
                      5.6.1  打開和映射Binder設(shè)備文件.......................234
                      5.6.2  注冊(cè)成為Binder上下文管理者.....................235
                      5.6.3  循環(huán)等待Client進(jìn)程請(qǐng)求.........................239
                  5.7  Service Manager代理對(duì)象接口的獲取過程................245
                  5.8  Service的啟動(dòng)過程....................................252
                      5.8.1  注冊(cè)Service組件................................253
                          5.8.1.1  封裝通信數(shù)據(jù)為Parcel對(duì)象.................254
                          5.8.1.2  發(fā)送和處理BC_TRANSACTION命令協(xié)議.........257
                          5.8.1.3  發(fā)送和處理BR_TRANSACTION返回協(xié)議.........270
                          5.8.1.4  發(fā)送和處理BC_REPLY命令協(xié)議...............282
                          5.8.1.5  發(fā)送和處理BR_REPLY返回協(xié)議...............288
                      5.8.2  循環(huán)等待Client進(jìn)程請(qǐng)求.........................291
                  5.9  Service代理對(duì)象接口的獲取過程........................294
                  5.10  Binder進(jìn)程間通信機(jī)制的Java實(shí)現(xiàn)接口..................302
                      5.10.1  獲取Service Manager的Java代理對(duì)象接口.........303
                      5.10.2  AIDL服務(wù)接口解析..............................312
                      5.10.3  Java服務(wù)的啟動(dòng)過程............................315
                      5.10.4  獲取Java服務(wù)的代理對(duì)象接口....................321
                      5.10.5  Java服務(wù)的調(diào)用過程............................324
              第六章  Ashmem匿名共享內(nèi)存系統(tǒng)................................329
                  6.1  Ashmem驅(qū)動(dòng)程序.......................................330
                      6.1.1  相關(guān)數(shù)據(jù)結(jié)構(gòu)...................................330
                      6.1.2  設(shè)備初始化過程.................................332
                      6.1.3  設(shè)備文件打開過程...............................334
                      6.1.4  設(shè)備文件內(nèi)存映射過程...........................336
                      6.1.5  內(nèi)存塊的鎖定和解鎖過程.........................338
                      6.1.6  解鎖狀態(tài)內(nèi)存塊的回收過程.......................345
                  6.2  運(yùn)行時(shí)庫(kù)cutils的匿名共享內(nèi)存接口.....................346
                  6.3  匿名共享內(nèi)存的C++訪問接口............................349
                      6.3.1  MemoryHeapBase.................................349
                          6.3.1.1  Server端的實(shí)現(xiàn)...........................349
                          6.3.1.2  Client端的實(shí)現(xiàn)...........................353
                      6.3.2  MemoryBase.....................................359
                          6.3.2.1  Server端的實(shí)現(xiàn)...........................360
                          6.3.2.2  Client端的實(shí)現(xiàn)...........................362
                      6.3.3  應(yīng)用實(shí)例.......................................364
                  6.4  匿名共享內(nèi)存的Java訪問接口...........................370
                      6.4.1  MemoryFile.....................................370
                      6.4.2  應(yīng)用實(shí)例.......................................375
                  6.5  匿名共享內(nèi)存的共享原理分析...........................386
          第三篇  Android應(yīng)用程序框架篇.....................................390
              第七章  Activity組件的啟動(dòng)過程................................391
                  7.1  Activity組件應(yīng)用實(shí)例.................................391
                  7.2  根Activity的啟動(dòng)過程.................................397
                  7.3  Activity在進(jìn)程內(nèi)的啟動(dòng)過程...........................429
                  7.4  Activity在新進(jìn)程中的啟動(dòng)過程.........................438
              第八章  Service組件的啟動(dòng)過程.................................441
                  8.1  Service組件應(yīng)用實(shí)例..................................441
                  8.2  Service在新進(jìn)程中的啟動(dòng)過程..........................448
                  8.3  Service在進(jìn)程內(nèi)的綁定過程............................460
              第九章  Android系統(tǒng)廣播機(jī)制...................................483
                  9.1  廣播應(yīng)用實(shí)例.........................................484
                  9.2  廣播接收者的注冊(cè)過程.................................491
                  9.3  廣播的發(fā)送過程.......................................499
              第十章  Content Provider組件的實(shí)現(xiàn)原理........................521
                  10.1  Content Provider組件應(yīng)用實(shí)例........................522
                      10.1.1  ArticlesProvider..............................523
                      10.1.2  Article.......................................533
                  10.2  Content Provider組件的啟動(dòng)過程......................548
                  10.3  Content Provider組件的數(shù)據(jù)共享原理..................570
                  10.4  Content Provider組件的數(shù)據(jù)更新通知機(jī)制..............593
                      10.4.1  內(nèi)容觀察者的注冊(cè)過程..........................594
                      10.4.2  數(shù)據(jù)更新的通知過程............................601
              第十一章  Zygote和System進(jìn)程的啟動(dòng)過程........................609
                  11.1  Zygote進(jìn)程的啟動(dòng)腳本................................609
                  11.2  Zygote進(jìn)程的啟動(dòng)過程................................612
                  11.3  System進(jìn)程的啟動(dòng)過程................................619
              第十二章  Android應(yīng)用程序進(jìn)程的啟動(dòng)過程.......................628
                  12.1  應(yīng)用程序進(jìn)程的創(chuàng)建過程..............................628
                  12.2  Binder線程池的啟動(dòng)過程..............................637
                  12.3  消息循環(huán)的創(chuàng)建過程..................................640
              第十三章  Android應(yīng)用程序的消息處理機(jī)制.......................644
                  13.1  創(chuàng)建線程消息隊(duì)列....................................644
                  13.2  線程消息循環(huán)過程....................................649
                  13.3  線程消息發(fā)送過程....................................654
                  13.4  線程消息處理過程....................................658
              第十四章  Android應(yīng)用程序的鍵盤消息處理機(jī)制...................666
                  14.1  InputManager的啟動(dòng)過程..............................669
                      14.1.1  創(chuàng)建InputManager..............................669
                      14.1.2  啟動(dòng)InputManager..............................672
                      14.1.3  啟動(dòng)InputDispatcher...........................674
                      14.1.4  啟動(dòng)InputReader...............................676
                  14.2  InputChannel的注冊(cè)過程..............................687
                      14.2.1  創(chuàng)建InputChannel..............................688
                      14.2.2  注冊(cè)Server端InputChannel......................695
                      14.2.3  注冊(cè)當(dāng)前激活窗口..............................699
                      14.2.4  注冊(cè)Client端InputChannel......................704
                  14.3  鍵盤消息的分發(fā)過程..................................708
                      14.3.1  InputReader處理鍵盤事件.......................708
                      14.3.2  InputDispatcher分發(fā)鍵盤事件...................715
                      14.3.3  當(dāng)前激活的窗口獲得鍵盤消息....................727
                      14.3.4  InputDispatcher獲得鍵盤事件處理完成通知.......741
                  14.4  InputChannel的注銷過程..............................745
                      14.4.1  銷毀應(yīng)用程序窗口..............................746
                      14.4.2  注銷Client端InputChannel......................754
                      14.4.3  注銷Server端InputChannel......................756
              第十五章  Android應(yīng)用程序線程的消息循環(huán)模型...................762
                  15.1  應(yīng)用程序主線程消息循環(huán)模型..........................762
                  15.2  界面無關(guān)的應(yīng)用程序子線程消息循環(huán)模型................764
                  15.3  界面相關(guān)的應(yīng)用程序子線程消息循環(huán)模型................766
              第十六章  Android應(yīng)用程序的安裝和顯示過程.....................775
                  16.1  應(yīng)用程序的安裝過程..................................775
                  16.2  應(yīng)用程序的顯示過程..................................808
          
                  第一篇包含三個(gè)章節(jié),介紹了Android系統(tǒng)源代碼的下載、編譯和運(yùn)行,Android系統(tǒng)的智能指針,以及Android系統(tǒng)的硬件抽象層。在應(yīng)用程序框架層的Native代碼中,大量的使用了智能指針,因此,在分析Android系統(tǒng)的源代碼之前,我們需要對(duì)它的智能指針有所了解。學(xué)習(xí)Android系統(tǒng)的硬件抽象層,能夠使得我們迅速掌握Android系統(tǒng)的層次結(jié)構(gòu)。

           

                  第二篇也是包含三個(gè)章節(jié),分析Android系統(tǒng)在Linux內(nèi)核中的三個(gè)專用驅(qū)動(dòng),分別是日志驅(qū)動(dòng)、Binder驅(qū)動(dòng)和匿名共享內(nèi)存驅(qū)動(dòng)。毋容置疑,這三個(gè)專用驅(qū)動(dòng)構(gòu)成了Android系統(tǒng)的基礎(chǔ),學(xué)習(xí)它們對(duì)了解Android系統(tǒng)有非常大的幫助。

                  第三篇包含了十個(gè)章節(jié),系統(tǒng)地分析Android應(yīng)用程序的架構(gòu),從應(yīng)用程序組件、進(jìn)程、消息和安裝四個(gè)角度來它進(jìn)行系統(tǒng)的分析。移動(dòng)平臺(tái)最核心的競(jìng)爭(zhēng)力是運(yùn)行在它上面的豐富的、高質(zhì)量的應(yīng)用程序,而這些豐富的、高質(zhì)量的應(yīng)用程序離不開優(yōu)秀的應(yīng)用程序基礎(chǔ)設(shè)施和架構(gòu),因此,花了很大的篇幅來介紹Android應(yīng)用程序的架構(gòu),同時(shí)它是理解整個(gè)Android系統(tǒng)的一個(gè)很好切入點(diǎn),畢竟系統(tǒng)所做的一切都是為使得它上面的應(yīng)用程序能夠好好地運(yùn)行、好好地為用戶服務(wù)。

          作者:Luoshengyang 發(fā)表于2012-3-30 2:31:13 原文鏈接
          閱讀:2444 評(píng)論:48 查看評(píng)論
          posted on 2012-04-17 21:32 mixer-a 閱讀(240) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 伊宁县| 万山特区| 卫辉市| 武邑县| 荃湾区| 河北省| 上林县| 太谷县| 通河县| 浏阳市| 拉萨市| 松溪县| 连州市| 那坡县| 赤水市| 玉溪市| 轮台县| 呼图壁县| 秦皇岛市| 昌江| 甘孜县| 商河县| 综艺| 柳州市| 灌南县| 乌鲁木齐市| 勐海县| 青岛市| 隆子县| 望江县| 庆阳市| 旌德县| 武鸣县| 大宁县| 华安县| 宁明县| 舟曲县| 饶阳县| 平顺县| 永吉县| 宿迁市|