當前位置:首頁 » 安卓系統 » android系統源代碼情景分析代碼

android系統源代碼情景分析代碼

發布時間: 2023-07-07 21:49:15

A. android系統源代碼情景分析 需要具備什麼基礎知識

Android系統的源代碼非常龐大和復雜,我們不能貿然進入,否則很容易在裡面迷入方向,進而失去研究它的信心。我們應該在分析它的源代碼之前學習好一些理論知識,下面就介紹一些與Android系統相關的資料。
我們知道,Android系統是基於linux內核來開發的,在分析它在運行時庫層的源代碼時,我們會經常碰到諸如管道(pipe)、套接字(socket)和虛擬文件系統(VFS)等知識。此外,Android系統還在Linux內核中增加了一些專用的驅動程序,例如用於日誌系統的Logger驅動程序、用於進程間通信的Binder驅動程序和用於輔助內存管理的匿名共享內存Ashmem驅動程序。在分析這些Android專用驅動程序的時候,也會碰到Linux內核中與進程、內存管理相關的數據結構。因此,我們有必要掌握一些Linux內核的基礎知識,下面就介紹四本典經的Linux內核書籍。
1.Linux Kernel Development.
這本書的作者是Robert Love,目前最新的版本是第3版。這本書對Linux內核的設計和實現提供了一個總覽視圖,從概念上對Linux內核的各個子系統的設計目標和實現思路進行了清晰的描述,非常適合初學者閱讀。如果從軟體工程的角度來看,這本書就相當於是Linux內核的概要設計文檔。
2.Understanding the Linux Kernel.
這本書的作者是Daniel P. Bovet和Marco Cesati,目前最新的版本是第3版。這本書對Linux內核的實現提供了更多的細節,詳細地描述了內核開發中用到的重要數據結構、演算法以及編程技巧,非常適合中高級讀者閱讀。如果從軟體工程的角度來看,這本書就相當於是Linux內核的詳細設計文檔。
3.Linux Device Drivers.
這本書的作者是Jonathan Corbet, Alessandro Rubini和Greg Kroah-Hartman,目前最新的版本是第3版。這本書更加註重實際操作,它詳細地講解了Linux內核驅動程序的實現原理和實現方法,讀者可以跟著它來實際地編寫出自己的Linux驅動程序。閱讀了這本書之後,對我們後續去分析Android的專用驅動程序是有非常大的幫助的。
4.Linux內核源代碼情景分析
這本書的作者是毛德操和胡希明,是中國人自己編寫的一本經典的Linux內核書籍。這本書最大的特點是從使用情景出發,對Linux內核的源代碼作了詳細的分析,幫助讀者把枯燥無味的源代碼給理順了。
掌握了Linux內核的基礎知識之後,還不宜馬上就去分析Android系統的源代碼,因為這樣做是漫無目的的,我們應該帶著問題或者目標去分析Android系統的源代碼。要把問題或者目標挖掘出來,最好的方法就莫過於是在Android平台上編寫自己的應用程序了。通過編寫應用程序,我們可以知道Android平台都提供了哪些功能,進而我們就會想去了解這些功能是怎麼實現的,這樣就可以達到帶著問題或者目標去分析Android系統的源代碼了。這里介紹兩個Android應用程序開發教程的書籍:
1.Professional Android 2 Application Development.
2.Google Android SDK開發範例大全.
這兩本書都使用了大量的例子來說明如何使用Android SDK來開發Android應用程序。讀者可以根據實際情況來練習一下,主要掌握Android應用程序四大組件(Activity、Service、Broadcast Receiver和Content Provider)的用法,因為Android系統的整個架構和實現就是為了向開發者提供這四大組件來實現各種各樣的應用程序的。在學習的過程中,如果遇到其它問題,還可以參考官方文檔

B. Android系統源代碼情景分析的目錄

第1篇初識Android系統
第1章准備知識................................................................ 2
1.1Linux內核參考書籍.................................................. 2
1.2Android應用程序參考書籍....................................... 3
1.3下載、編譯和運行Android源代碼........................... 3
1.3.1下載Android源代碼........................................... 4
1.3.2編譯Android源代碼........................................... 4
1.3.3運行Android模擬器........................................... 5
1.4下載、編譯和運行Android內核源代碼............................................................ 6
1.4.1下載Android內核源代碼................................... 6
1.4.2編譯Android內核源代碼................................... 7
1.4.3運行Android模擬器........................................... 8
1.5開發第一個Android應用程序................................... 8
1.6單獨編譯和打包Android應用程序模塊.......................................................... 11
1.6.1導入單獨編譯模塊的mmm命令............................................................... 11
1.6.2單獨編譯Android應用程序模塊............................................................... 12
1.6.3重新打包Android系統鏡像文件............................................................... 12
第2章硬體抽象層....................................................... 13
2.1開發Android硬體驅動程序..................................... 14
2.1.1實現內核驅動程序模塊.................................. 14
2.1.2修改內核Kconfig文件...................................... 21
2.1.3修改內核Makefile文件..................................... 22
2.1.4編譯內核驅動程序模塊.................................. 22
2.1.5驗證內核驅動程序模塊.................................. 23
2.2開發C可執行程序驗證Android硬體驅動程序............................................... 24
2.3開發Android硬體抽象層模塊................................. 26
2.3.1硬體抽象層模塊編寫規范............................... 26
2.3.2編寫硬體抽象層模塊介面............................... 29
2.3.3硬體抽象層模塊的載入過程........................... 33
2.3.4處理硬體設備訪問許可權問題........................... 36
2.4開發Android硬體訪問服務..................................... 38
2.4.1定義硬體訪問服務介面.................................. 38
2.4.2實現硬體訪問服務.......................................... 39
2.4.3實現硬體訪問服務的JNI方法.......................... 40
2.4.4啟動硬體訪問服務.......................................... 43
2.5開發Android應用程序來使用硬體訪問服務.................................................. 44
第3章智能指針............................................................... 49
3.1輕量級指針............................................................. 50
3.1.1實現原理分析................................................ 50
3.1.2應用實例分析................................................ 53
3.2強指針和弱指針..................................................... 54
3.2.1強指針的實現原理分析.................................. 55
3.2.2弱指針的實現原理分析.................................. 61
3.2.3應用實例分析................................................ 67
第2篇Android專用驅動系統
第4章Logger日誌系統............................................. 74
4.1Logger日誌格式....................................................... 75
4.2Logger日誌驅動程序.............................................. 76
4.2.1基礎數據結構................................................ 77
4.2.2日誌設備的初始化過程.................................. 78
4.2.3日誌設備文件的打開過程............................... 83
4.2.4日誌記錄的讀取過程...................................... 84
4.2.5日誌記錄的寫入過程...................................... 88
4.3運行時庫層日誌庫................................................. 93
4.4C/C++日誌寫入介面............................................. 100
4.5java日誌寫入介面................................................ 104
4.6Logcat工具分析..................................................... 110
4.6.1基礎數據結構.............................................. 111
4.6.2初始化過程.................................................. 115
4.6.3日誌記錄的讀取過程.................................... 127
4.6.4日誌記錄的輸出過程.................................... 132
第5章Binder進程間通信系統............................... 144
5.1Binder驅動程序..................................................... 145
5.1.1基礎數據結構.............................................. 146
5.1.2Binder設備的初始化過程.............................. 164
5.1.3Binder設備文件的打開過程.......................... 165
5.1.4Binder設備文件的內存映射過程............................................................ 166
5.1.5內核緩沖區管理........................................... 173
5.2Binder進程間通信庫............................................. 183
5.3Binder進程間通信應用實例................................. 188
5.4Binder對象引用計數技術..................................... 196
5.4.1Binder本地對象的生命周期.......................... 197
5.4.2Binder實體對象的生命周期.......................... 201
5.4.3Binder引用對象的生命周期.......................... 204
5.4.4Binder代理對象的生命周期.......................... 209
5.5Binder對象死亡通知機制..................................... 212
5.5.1注冊死亡接收通知........................................ 213
5.5.2發送死亡接收通知........................................ 216
5.5.3注銷死亡接收通知........................................ 221
5.6Service Manager的啟動過程.................................. 224
5.6.1打開和映射Binder設備文件.......................... 226
5.6.2注冊為Binder上下文管理者.......................... 227
5.6.3循環等待Client進程請求............................... 231
5.7Service Manager代理對象的獲取過程........................................................... 238
5.8Service組件的啟動過程........................................ 244
5.8.1注冊Service組件............................................ 245
5.8.2啟動Binder線程池......................................... 289
5.9Service代理對象的獲取過程................................ 291
5.10Binder進程間通信機制的Java介面............................................................. 300
5.10.1Service Manager的Java代理對象的獲取過程.......................................... 300
5.10.2Java服務介面的定義和解析.................................................................. 310
5.10.3Java服務的啟動過程.................................... 313
5.10.4Java服務代理對象的獲取過程.............................................................. 320
5.10.5Java服務的調用過程.................................... 323
第6章Ashmem匿名共享內存系統.............................................................. 327
6.1Ashmem驅動程序................................................. 328
6.1.1基礎數據結構.............................................. 328
6.1.2匿名共享內存設備的初始化過程........................................................... 330
6.1.3匿名共享內存設備文件的打開過程....................................................... 332
6.1.4匿名共享內存設備文件的內存映射過程................................................ 334
6.1.5匿名共享內存塊的鎖定和解鎖過程....................................................... 336
6.1.6匿名共享內存塊的回收過程.................................................................. 344
6.2運行時庫cutils的匿名共享內存訪問介面.................................................... 345
6.3匿名共享內存的C++訪問介面............................. 349
6.3.1MemoryHeapBase......................................... 349
6.3.2MemoryBase................................................. 359
6.3.3應用實例..................................................... 364
6.4匿名共享內存的Java訪問介面............................. 370
6.4.1MemoryFile.................................................. 370
6.4.2應用實例..................................................... 375
6.5匿名共享內存的共享原理.................................... 386
第3篇Android應用程序框架
第7章Activity組件的啟動過程............................. 392
7.1Activity組件應用實例............................................ 392
7.2根Activity組件的啟動過程.................................... 398
7.3子Activity組件在進程內的啟動過程............................................................ 432
7.4子Activity組件在新進程中的啟動過程........................................................ 440
第8章Service組件的啟動過程............................ 443
8.1Service組件應用實例............................................. 443
8.2Service組件在新進程中的啟動過程............................................................. 451
8.3Service組件在進程內的綁定過程................................................................. 463
第9章Android系統廣播機制................................. 486
9.1廣播機制應用實例............................................... 487
9.2廣播接收者的注冊過程........................................ 493
9.3廣播的發送過程................................................... 501
第10章Content Provider組件的實現原理................................................. 524
10.1Content Provider組件應用實例........................... 525
10.1.1ArticlesProvider........................................... 525
10.1.2Article......................................................... 535
10.2Content Provider組件的啟動過程................................................................ 550
10.3Content Provider組件的數據共享原理........................................................ 573
10.3.1數據共享模型............................................. 573
10.3.2數據傳輸過程............................................. 576
10.4Content Provider組件的數據更新通知機制................................................ 596
10.4.1注冊內容觀察者.......................................... 597
10.4.2發送數據更新通知...................................... 603
第11章Zygote和System進程的啟動過程................................................. 611
11.1Zygote進程的啟動腳本........................................ 611
11.2Zygote進程的啟動過程........................................ 614
11.3System進程的啟動過程....................................... 622
第12章Android應用程序進程的啟動過程................................................. 630
12.1應用程序進程的創建過程.................................. 630
12.2Binder線程池的啟動過程................................... 639
12.3消息循環的創建過程.......................................... 641
第13章Android應用程序的消息處理機制................................................. 645
13.1創建線程消息隊列............................................. 645
13.2線程消息循環過程............................................. 650
13.3線程消息發送過程............................................. 655
13.4線程消息處理過程............................................. 660
第14章Android應用程序的鍵盤消息處理機制....................................... 667
14.1鍵盤消息處理模型............................................. 667
14.2InputManager的啟動過程.................................... 670
14.2.1創建InputManager...................................... 670
14.2.2啟動InputManager...................................... 673
14.2.3啟動InputDispatcher.................................... 675
14.2.4啟動InputReader........................................ 677
14.3InputChannel的注冊過程..................................... 688
14.3.1創建InputChannel....................................... 689
14.3.2注冊Server端InputChannel........................... 697
14.3.3注冊系統當前激活的應用程序窗口..................................................... 701
14.3.4注冊Client端InputChannel........................... 706
14.4鍵盤消息的分發過程.......................................... 709
14.4.1InputReader獲得鍵盤事件........................... 710
14.4.2InputDispatcher分發鍵盤事件............................................................... 717
14.4.3系統當前激活的應用程序窗口獲得鍵盤消息....................................... 727
14.4.4InputDispatcher獲得鍵盤事件處理完成通知......................................... 743
14.5InputChannel的注銷過程..................................... 746
14.5.1銷毀應用程序窗口...................................... 747
14.5.2注銷Client端InputChannel........................... 756
14.5.3注銷Server端InputChannel........................... 758
第15章Android應用程序線程的消息循環模型....................................... 764
15.1應用程序主線程消息循環模型.......................... 765
15.2與界面無關的應用程序子線程消息循環模型.......................................... 766
15.3與界面相關的應用程序子線程消息循環模型.......................................... 769
第16章Android應用程序的安裝和顯示過程............................................ 778
16.1應用程序的安裝過程......................................... 778
16.2應用程序的顯示過程.......................................... 814

C. Android系統源代碼情景分析的作者簡介

羅升陽,1984年出扒吵生,2007年畢業於浙江大學計算機系,取得學士學位,2010年畢業於上海交通大學計算機系,取得碩士學位。畢業後一直從事於互聯春升侍網軟體開發,並且致力於移動平台的研究,特別是對Android平台有深入的理解和研究。在國內知名IT技術社區CSDN上發表了數十篇高質量的Android系統原創性文章,並且開設博客專欄--《老羅的Android之旅》,積極與網友互動,深受大家喜愛,訪問量一直居於前笑激茅。

D. 怎樣查看 Android APP源代碼

將apk文件拷貝至sdcard上。
命令順序如下:

進入Android sdk文件夾/tools目錄下
輸入adb shell
輸入su
輸入cd data
輸入cd app
這時就可以看到你安裝的所有的apk文件。輸入cp 空格 對應的apk 空格 /sdcard/
這樣就將apk文件拷貝出來了。
將apk文件後綴直接變成rar格式,可以看到熟悉的目錄結構了,

其中xml文件打開後都是二進制的,無法查看。
這時就用到了一個android4me的AXMLPrinter2工具。(請自行網路搜索)
輸入以下命令,將xml文件解析出來
java -jar AXMLPrinter2.jar showtimes_list.xml
此命令是在命令行中查看此showtimes_list.xml
將showtimes_list.xml生成xml文件,則輸入以下命令:
java -jar AXMLPrinter2.jar showtimes_list.xml > h.xml
目前進行到這一步,只能看到xml文件的內容,其工程中的java源文件還是看不到,看目錄結構下有一個classes.dex文件,我們需要將dex文件變為jar文件。
這里用到了另一個工具dex2jar。(自行搜索下載)
在Windows下解壓之後的目錄如下圖所示:

在命令行中,進入到此目錄下:
在Windows下,輸入以下命令:
dex2jar.bat c:classes.dex
運行完之後,在C盤會多一個classes.dex.dex2jar.jar文件,此文件就是我們需要的jar文件。
利用jd-gui,將jar文件反向工程為java代碼。(請自行搜索下載)
它分為Windows、Linux、和max三個版本,這里我下載的是Windows版本的。
解壓之後,雙擊運行exe文件,選擇classes.dex.dex2jar.jar文件,相應的jar文件中的Java文件就被反向工程顯示出來了!

E. 中國安卓系統推廣者有哪些

1.袁輝輝
Android系統工程師,曾就職於IBM、Lenovo,目前就職於小米MIUI系統組,對Android系統源碼研究的比較透徹,畢竟是系統工程師。博客中有很多高質量的源碼分析文章.
博客地址:Gityuan
2.羅升陽
江湖人稱老羅(其實挺年輕的),對Android系統源碼有頗深的研究,著有《Android系統源代碼情景分析》一書,並且在CSDN上分享了出來,文章內容的質量也是非常高,非常值得研讀一番,聽說他最近在oppo供職。
博客地址:老羅的Android之旅
3.鄧凡平
《深入理解Android 卷》一書的作者,早年是做C++開發的,後來轉到Android開發,對Android源碼研究的也比較透徹,也有自己的博客:
博客地址:Innost的專欄
4.郭霖
《第一行代碼》一書的作者,主要分析應用層的代碼,將一些開源庫的分析比較透徹。
博客地址:郭霖的專欄
5.尼古拉斯_趙四
此人擅長於Android逆向,對於APK的加固破解有較深入的研究,擅長從反編譯已經被混淆的代碼中尋找線速,再結合Xposed工具修復已經按照的應用的功能
博客地址:尼古拉斯.趙四
GITHUB:尼古拉斯.趙四
6.Weishu
真名可能是叫田維術,博客行文不錯,很容易讓人明白,也有不少實實在在的干貨。
博客地址:Weishu』s Notes
7.zjutkz
對於Android熱修復,逆向以及RN Weex開發有一些的研究,博客文章數量不多,但有些文章寫的還可以。
博客地址:zjutkz』s blog
8.任玉剛

F. 如何調試跟蹤Android Framework源代碼

本文講解如何在Eclipse中導入Android源代碼(包括Framework和Application的代碼),然後通過模擬器或真機跟蹤/調試Android的Java代碼,區別於一般基於Android SDK的純應用開發,這里可以跟蹤/調試Framework中的代碼。

一、准備工作

確保機器上已經安裝並配置下列軟體環境:JDK/ Eclipse / Android SDK / ADT

即,機器上已經安裝了Eclipse下Android應用開發所需的環境。如果還未配置,移步《搭建Windows下Android應用開發環境——Eclipse/Android/ADT》。

另外,為了跟蹤調試Android源碼,你還需要有Android源碼,並有源碼的編譯環境,可以是:

  • 虛擬機環境 虛擬機中安裝Linux,Linux下編譯Android源碼。此環境下,如果要在宿主機的Eclipse中調試,還需要把Android的源碼路徑共享出來,宿主機可訪問到;

  • 有單獨的可編譯Android的網路環境 在你的客戶端的機器上訪問伺服器共享出來的Android的源碼路徑;

  • Linux環境下直接通過Eclipse跟蹤調試本機上的Android源碼。

  • 注意:不管哪種工作方式,Android源碼要都是已經編譯過的,且編譯時採用的是Eng模式(vs User mode)。編譯Android Platform和Kernel的過程,可參考《Ubuntu10.10下編譯Android2.2平台》及《Ubuntu10.10下編譯Android2.2內核》。

    二、基本設置

    准備工作完畢之後,現在做一些基本的設置。

    1. 把Android源碼路徑<Android_ROOT>下的developmentideeclipse中的.classpath文件復制到<Android_ROOT>下;如果需要在模擬器中進行調試的話,需要復制三個img(具體方法見http://wenku..com/view/26d9063c87c24028915fc366.html)

    2. 修改Eclipse的設置

    修改eclipse.ini文件,更改下列內容:

    [plain]view plain

  • -Xms40m

  • -Xmx384m

  • 改為:

    [java]view plain

  • -Xms128m

  • -Xmx512m

  • 這里增大最小Java堆大小到128MB,增大最大Java堆大小到512MB。

    三、Eclipse中創建工程

    1. File > New > Java Project

G. 沒有android內核的系統源代碼應該怎麼利用

1. 獲取源代碼
在cd ~/myandroid/kernel中執行以下命令
git clone git://android.git.kernel.org/kernel/common.git
這需要不少的時間,因為它會把整個Linux Kernel的代碼復制下來。

然後進入到common目錄,然後用下面的命令來取得goldfish分支:
git checkout origin/android-goldfish-2.6.27 -b goldfish
這樣我們就在本地建立了一個名為goldfish的android-goldfish-2.6.27分支,代碼則已經與android-goldgish-2.6.27同步。
可以通過git branch來列出本地的所有分支。

2. 在Host OS上准備編譯環境
盡管很多人安裝完Ubuntu後第一件事情就是裝上build-essential,不過我在這里還是要提醒一下大家,另外做menuconfig的時候ncurses-devel庫也是必須的。運行以下命令,一次搞定:
sudo apt-get install build-essential ncurses-dev

3. 准備交叉編譯工具鏈
Android代碼樹中有一個prebuilt項目,包含了我們編譯內核所需的交叉編譯工具。如果你拿了完整的Android platform 的代碼樹,它就會在prebuilt目錄下。如果沒有拿完整的代碼樹也沒有關系,只要用Git clone一個或者到從GitWeb下載一個prebuilt項目 ,如果是從GitWeb下載的話記得解壓縮就行。

4. 設定環境變數
把prebuilt中的arm-eabi編譯器加入$PATH
$export PATH=$PATH:/myandroid/androidsrc/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin

設定目標arch為arm
$export ARCH=arm

打開kernel目錄下的Makefile文件,把CROSS_COMPILE指向剛才下載的prebuilt中的arm-eabi編譯器
CROSS_COMPILE ?= arm-eabi-

LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,/
$(call ld-option, -Wl$(comma)–build-id,))
這一行注釋掉,並且添加一個空的LDFLAGS_BUILD_ID定義,如下:
LDFLAGS_BUILD_ID =
下面的這段解釋來自陳罡的blog
把它注釋掉的原因是目前android的內核還不支持這個選項。–build-id選項,主要是用於在生成的elf可執行文件中加入一個內置的id,這樣在core mp,或者debuginfo的時候就可以很快定位這個模塊是哪次build的時候弄出來的。這樣就可以避免,每次都把整個文件做一遍效驗,然後才能得到該文件的是由哪次build產生的。對於內核開發者來說,這是很不錯的想法,可以節約定位模塊版本和其影響的時間。目前,該功能還出於early stage的狀態,未來的android或許會支持,但至少目前的版本是不支持的。
對這個–build-id選項感興趣的朋友,可以訪問下面的網址,它的作者已經解釋得非常明白了:
http://fedoraproject.org/wiki/Releases/FeatureBuildId
5、從SDK中獲得內核配置文件
大家都知道,內核編譯中有一步make menuconfig,用於配置kernel。這里我們可以先獲取官方的配置,如果必要的話再作改動。先啟動模擬器 emulator -avd xxxx ,然後通過adb pull命令(該命令用於從設備上復制文件到本地)即可完成。
$adb pull /proc/config.gz ~/
現在我們用gunzip把config.gz解開,把得到的config文件移動到kernel source所在的目錄,然後重命名為.config即可。
$ gunzip config.gz
$ mv config ~/sources/goldfish-kernel/.config

6、開始編譯
因為我們之前已經把SDK中.config復制到了kernel目錄下,如果需要修改配置,可以使用
make menuconfig
修改並保存配置,如果沒有特殊需要的話就可以直接用
make
命令來編譯內核了

7、測試生成的zImage
編譯內核的過程應該很順利,因為默認的配置對內核作了大幅的精簡,大約5~6分鍾就可以編譯完成了,會在最終會在arch/arm/boot目錄下面生成一個zImage,這個就是我們所要的運行在模擬器上的內核映像了。
下面我們就在模擬器中測試一下我們所生成的zImage。
emulator avd xxx -kernel ./zImage
其中xxx是AVD名稱 ,如果想輸出kernel log,請加上-show-kernel參數。

關於為實際設備編譯kernel
如果要為一個實際的設備比如說G1重新編譯內核映像,步驟和上述為一個運行在模擬器上的內核映像步驟基本一致,只是所需要的源代碼應當來自主線而不是goldfish分支。另外,編譯完成以後載入映像的方式也不同,需要通過USB將映像燒入nand flash。

H. 怎樣評價羅升陽的android系統源代碼分析

我幹了3年Android sdk開發,覺得到了瓶勁沒法更進一步,於是花了一年多點時間,大概摸到點門徑。根據前輩的經驗,Android底層完全入門需要兩年。 先說下我的入門過程: 第零步,下載源碼,我下的4.2的,框架層源碼10G,內核2G多,ctags給框架層建的標簽文件都有600M,當時讓我有點震撼,用的vim+ctags+cscope來閱讀,還算不錯,架構挺清晰的。 第一步,我找到了一本好書《Android的設計與實現 第一卷》它講了Android框架層的啟動,初始化,服務框架初始化,Binder,消息循環,PackageManagerService,ActivityManagerService。據作者說後面會出講UI子系統的第二卷,拭目以待。其實這本書看了幾十頁我就發現需要第二步的知識,否則看不下去,於是跳去第二步。 第二步,學習Linux系統編程,在看《Android的設計與實現》的時候我發現,框架層的Native部分,全是Linux編程。為了掌握這部分知識,我花了4個月學習了《Linux系統編程手冊》(TLPI)這本1000多頁的書,我以前是搞WIndows文件系統這塊的,所以C語言還比較熟,TLPI的習題很有意思,量也比較大,堅持下來還是收獲很多。 第三步,花了4個月學習了一些Linux內核的知識,看了LKD,PLKA看了一半多。越學越沒底,覺得不懂得越來越多,不過這個也正常,只有靠慢慢磨,估計以後要不斷的磨這塊。 第四步,回頭看Android源碼,這次一口氣看完了《Android的設計與實現 第一卷》,終於對框架層有了譜。同時真的數次把我看暈,前面看Linux內核源碼都沒這么暈,不斷在Java層和Native層之間跳有點磨腦漿。其中我又覺得Java的基礎沒有打太牢,回去補了一個月的《Core Java》第八版。但是這書沒有涉及UI子系統,於是又看了《Android內核剖析》 第五步,《Android內核剖析》(這本書實際上是講框架層的,作者也是個搞嵌入式的,所以他在寫框架層的時候文筆不太好,很羅嗦,不過還是有很多看點,到他後來寫做ROM,玩開發板時估計是說到了他的本行,一下子遛起來了看得出還是挺有水平的,這本書知識有點舊畢竟講的是2.3很多代碼已經過時,但是作者很多點子很有參考價值)這本書講UI子系統和按鍵/觸摸消息處理系統還是很有分量的,尤其13章View繪制那裡,結合源碼研究很有收獲。而後面他講編譯框架和ROM相關的東西都是挺寶貴的資料。 第六步,為了再補一下其他諸如電源管理模塊等子系統的知識看了,《深入理解android》系列,個人認為這個系列看起來有點不太舒服,不過作為補充印證還是比較有價值。 第七步,《Android系統源代碼情景分析》,羅升陽的源碼分析大作,比《Android的設計與實現》分析得更細致,但缺點是涉及到模塊比較少,選用的源碼也比《Android的設計與實現》更舊一點。看完書後需要去研究作者的博客,東西挺多的,一定讓你滿意。 第八步,買塊開發板自己玩。這步我還沒走到,原因是我覺得我還差點准備知識。可能要再幾個月,到時准備入塊6410或者樹莓派。 最後,由於我11年以前都是搞Windows這塊的,所以對Linux知識不是很了解,不得已看了這么些書,如果是一直做Linux的人,很多步驟估計可以省掉了。直接上源碼才是正道。 我本身做著移動GIS開發的工作,學框架層全是因為興趣,但招聘平台Android框架層開發人員還是蠻有競爭力的有不少定製ROM,智能電視的工作都處於人才難求狀態,畢竟有一定的門檻,現在各種ios培訓,讓奔著錢干開發的人紛紛湧入,而ios只能幹sdk開發的缺點就暴露出來了,一堆新手老手,菜鳥大牛全擠在SDK開發這塊,我覺得不太妙。 反觀Android這邊,雖然入門菜鳥沒有搞ios來錢,但是可持續性很好,從sdk-》框架》驅動》內核這樣幹下去。干著干著發現自己漸漸變成了Linux開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。 轉載

熱點內容
逍遙安卓在哪裡下載的視頻 發布:2025-02-06 10:50:42 瀏覽:876
上編程序 發布:2025-02-06 10:49:08 瀏覽:795
會議源碼 發布:2025-02-06 10:47:09 瀏覽:92
phpeclipse斷點 發布:2025-02-06 10:47:02 瀏覽:360
腳本之家知網收錄嗎 發布:2025-02-06 10:39:08 瀏覽:770
昵稱與密碼的意思是什麼 發布:2025-02-06 10:27:38 瀏覽:671
伺服器沒密碼怎麼辦 發布:2025-02-06 10:27:36 瀏覽:206
寶塔面板阿里雲伺服器偽靜態 發布:2025-02-06 10:24:50 瀏覽:342
android輸入框限制 發布:2025-02-06 10:24:47 瀏覽:398
阿里雲新購伺服器備案 發布:2025-02-06 10:22:05 瀏覽:982