1. 程式人生 > >【學習筆記】65~百度看到的比較好的Android原始碼學習路徑

【學習筆記】65~百度看到的比較好的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開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好