【安卓本卓】Android系統源碼篇之(一)源碼獲取、源碼目錄結構及源碼閱讀工具簡介


前言

       轉載請聲明,轉自【https://www.cnblogs.com/andy-songwei/p/9911386.html】,謝謝!

       古人常說,“熟讀唐詩三百首,不會作詩也會吟”,說明了大量閱讀詩歌名篇對學習作詩有非常大的幫助。做開發也一樣,Android源碼是全世界最優秀的Android工程師編寫的代碼,也是Android開發中絕對的權威所在。Android系統開源,且占據了當今手機系統世界的絕大部分江山,各大手機廠商要做手機系統定制,就必須對Android系統源碼非常熟悉,這就要求他們的工程師們去熟讀源碼。即使是純第三方App的開發者,要想成為Android開發真正的行家里手,也必須對系統源碼有一定的研究。本系列文章將記錄筆者學習Android源碼的理解和心得,以此來和廣大的同行們進行交流和相互提升。

       本篇文章是這一系列的第一篇,將主要記錄或者介紹Android源碼的獲取,系統源碼的宏觀結構及內容,源碼閱讀工具推薦及使用方法等內容。主要內容如下:

        

 

  

一、Ubuntu下獲取Android系統源碼

        Android源碼的獲取方式有許多,既可以在Windows下去獲取,也可以Linux下去下載,比較常見的方法是在Linux下用repo工具去下載。筆者使用的方式是在Windows7系統下安裝Ubuntu16.04雙系統,然后采用repo工具去獲取的源碼。其中每一個步驟都可以在網上找到很多資料,筆者不贅述,也不自己探索方法,這里僅記錄下成功安裝獲取源碼過程中參考的網頁、主要步驟以及碰到的若干問題,以供讀者和筆者自己以后參考使用。基本操作步驟如下:

  1、在Win7中分區

        在Windows7中為Ubuntu系統分區,參考了【Win7下安裝Ubuntu16.04成雙系統】中第一節分區步驟。Android系統源碼未編譯前就有大約20-30G大小,編譯后更大,所以一定要預留足夠的空間。

  2、制作Ubuntu U盤系統啟動盤

        參看網頁【Ubuntu16.04安裝基礎入門教程】前5步。Ubutu鏡像文件從Ubutu官網下載即可,不過需要注意的是,要先弄清楚下載32位還是64位的系統:在主系統Win7桌面查看“計算機”圖標屬性,可以看到系統的位數,如下圖所示:

        

       所以咱們在選擇Ubuntu系統的時候也選擇64位的。這里筆者也有一個疑問,既然這里Ubuntu和Win7是獨立的雙系統,那么應該沒有必要兩個系統的位數必須一致吧,這里筆者沒有研究過,讀者可以去查資料探索一下,當然,選擇同樣的位數總是會比較保險一點。在Ubuntu下載版本中,結尾為amd64的版本為64位系統,結尾為i386的版本為32位系統。

  3、U盤啟動並安裝Ubuntu系統

       在BIOS boot中將默認的硬盤啟動修改為U盤啟動,然后重啟即可進入到Ubuntu的安裝界面,根據需要一步一步進行即可。至於如何進入到BIOS設置界面,不同的主板快捷鍵不一樣,筆者這里不詳述,讀者根據主板型號百度即可。安裝成功后,記得修改回來為默認硬盤啟動。

  4、Ubuntu中獲取源碼

        參考【Aosp|鏡像使用幫助|清華大學開源鏡像站】,筆者選擇的是“使用每月更新的初始化包”。源碼比較大,所以下載需要好幾個小時的時間,所以最好在晚上下載,避開網絡使用高峰期。

  5、碰到的問題記錄

    (1)安裝完Ubuntu后,再重啟時,系統選項中找不到原Win7系統。

         安裝好Ubuntu后,我們希望在啟動電腦的時候出現一個系統選項,選擇是進入原Win7系統還是新安裝的Ubuntu系統。如提問中描述,找不到Win7系統選項入口,就無法進入到原來的Win7系統中。這種情況,請參考【Win7系統安裝Ubuntu系統后,不能進入Win7】。筆者曾多次碰到過這個問題,以為是把原Win7系統給覆蓋掉了,走過不少的彎路,后來找到鏈接中的方法才解決。

 

二、Android源碼目錄結構

       Android系統源碼內容實在太廣,其目錄結構也實在龐大,每位開發者也無法做到對每一塊都弄明白,工作中接觸的也只是其中的一小部分。以下只從宏觀上對系統源碼的一級目錄進行介紹,后續再慢慢完善更細致的內容。

        

 

三、Android系統架構和源碼的聯系

       在筆者以前的博客【朝花夕拾】Android性能篇之(五)Android虛擬機第二大點中簡單介紹過Android的系統架構,其實在Native Libraries層和Linux Kernel層之間還有一層——HAL層,即Hardware Abstract Layer,硬件抽象層。在眾多介紹Android系統架構的展示圖中,有的版本顯示HAL,有的沒有,讀者知道有這一層就好了。如下為Android源碼官網【AOSP:Android Open Source Project 】中Android系統架構圖,就展示HAL。

        

       對於Android系統架構每一層,Android源碼結構中都有相關目錄與之對應。下圖展示了在Android源碼一級目錄中,各框架層和部分目錄的對應關系:

        

        理解Android系統結構和Android系統源碼的對應關系,有助於幫助咱們理解Anroid系統源碼。當然,這幅思維導圖中只介紹了源碼一級目錄和系統架構的對應關系,深入各個目錄,每個系統架構層還可以找到很多源碼與之對應,讀者可以再深入研究研究。與此同時,同一個目錄下的源碼,也可能涉及多個系統架構層的內容,比如,frameworks層中就有frameworks/base/packages/SystemUI這個目錄,眾所周知,SystemUI是一款系統App,是屬於應用層的。所以,對某個目錄的對應的系統架構層,也不能一概而論。

 

四、Android源碼閱讀工具介紹

       選擇好的源碼閱讀工具,可以讓工作事半功倍。如今市面上有許多工具來輔助閱讀源碼,有在線閱讀的,比如:AndroidXRef、Android SDK Search等;也有本地閱讀的,比如:Source Insight等。同時,Google也提供了官方網站,用於指導開發者使用源碼:【AOSP文檔網站(中文版)https://source.android.google.cn/

  1、AndroidXRef

        前文也說過,Android源碼非常龐大,下載源碼也是非常耗用時間。我們可能經常碰到需要臨時查看源碼,而當前設備上沒有的情況。幸運的是,有一些在線閱讀源碼的網站,給開發者帶來了很大的便利,AndroidXRef就是其中一款備受青睞的源碼在線閱讀網站【網址:http://androidxref.com/】。在這里,筆者簡單介紹一下該網站的基本使用。

    (1)查看並選擇系統版本

       進入首頁后,可以看到Google發布的各個系統版本,按照發布時間排序,包括版本別名,版本號,內核號等,如下圖所示,開發者可以根據需要點擊進入對應的版本。

        

    (2)源碼查找主界面功能點

       

    (3)搜索條件的解鎖及使用

      1)Full Search

       進行全文搜索,屬於模糊查詢,忽略大小寫,會匹配所有的單詞、字符串、標識符以及數字等,包括注釋在內。如下圖所示,為全文搜索“Activity”的結果,也顯示了所在文件的路徑,可以點擊進入對應的文件。

       

      2)Definition

       搜索符號定義相關的代碼。如下所示,同樣輸入“Activity”后,顯示的搜索結果,“Activity”都是作為包名、類名或定義類型,方法名等出現的,可以和上面Full Search結果做對比。多次嘗試搜索的結果來看,這里會區別大小寫,搜索的也是整個單詞,這里搜索會更精准一些。

       

      3)Symbol

       符號搜索,主要用於搜索類中的成員變量等,也是精確查找,如下圖所示,就是根據成員變量“FEATURE_NO_TITLE”搜索的結果。

       

       4)File Path

       搜索源碼文件名或路徑中包含搜索條件字符串的文件,忽略大小寫。如下所示,顯示了文件路徑或文件名中包含了“Activity”的結果。

       

      5)History

       該條件暫時沒發現怎么使用,有寫帖子上甚至直接說該條件沒用,這里筆者不做說明,也不舉例了。

       該部分能夠幫助開發人員快速定位到想要查看的代碼,熟練使用,能極大地提高效率。上述介紹的都是單一條件搜索,開發人員可以根據實際情況對條件進行組合搜索,這樣搜索起來就更精准了,使用起來很簡單,這里不再舉例子了。

  2、Android SDK Search

       該工具使用起來使得在線閱讀源碼更方便,將API和源碼完美結合起來。但是使用該工具,需要VPN,即需要FQ,訪問境外服務器。這里筆者就不詳細介紹了,能FQ的讀者,可以參考如下使用方法網址:【Android SDK Search 使用方法】。另外提供一個免費FQ工具,簡單易用:【藍燈(Lantern)】。

  3、Source Insight

       這是一款被開發者們廣泛使用和稱贊的本地源碼閱讀軟件,除了閱讀,還可以方便地進行開發。Source Insight工具功能強大,操作復雜,以后會專門寫一篇文章來介紹它的使用,這里篇幅有限,就不詳細介紹了。除此之外,還有很多開發工具可以用來閱讀源碼,比如Eclipse,Android Studio等都可以用來閱讀系統源碼,但這方面的功能無法和Source Insight相提並論,就不多做介紹了,把使用最廣泛,最專業的工具用好就可以了。

     

五、附錄:Andriod源碼下載地址分享

  1、android-6.0.1_r72

       鏈接:https://pan.baidu.com/s/1jq_Op-iFtk53PonHd3aadA  提取碼:vfg1

  2、android-7.1.1_r1

       鏈接:https://pan.baidu.com/s/1yb1jPBl471W8AbdO2056rg  提取碼:v32i

  3、android-8.0.0_r1

       鏈接:https://pan.baidu.com/s/1EsXV75Yd9UYKyCn-THGFgQ  提取碼:c1w8

  4、android1.6-8.1

       鏈接:https://pan.baidu.com/s/1ngsZs

 

       本篇文章作為Android系統源碼系列的第一篇,主要介紹了獲取源碼,以及源碼閱讀工具使用方法等方面內容,為后續深入分析和理解源碼做准備工作。限於筆者的經驗和知識水平,文中有論述不准確或不恰當的地方,請讀者們多多指正,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM