1. 程式人生 > >線上看Android系統原始碼,那些相見恨晚的幾種方案

線上看Android系統原始碼,那些相見恨晚的幾種方案

前言:最近在研究MediaCodec,u盤壞了,之前下載的原始碼也就自然沒有了,真是個難過的事情,不能因為沒有原始碼了,就阻擋我的計劃了呀,於是就是今天一文,線上看Android原始碼,加之此前很多人也有向我留言,如何看android系統的原始碼,今天來敲黑板,劃重點了。

不管是做Android底層開發,還是做應用層開發,在Android這條路上走下去,必須對於Android原始碼夠了解,如某一個功能,某一個機制,或者某一個API,它到底是如何實現的,需要 Read the fucking source code,才能知其然,知其所以然。下面幾種線上看原始碼的方式:

3,Android SDK Search外掛

來說說這三種方式的體驗,http://androidxref.com,這個同步官方原始碼,最新的7.0,上面也已經有了,我也比較喜歡這個,該有的功能應用盡有,第2個的話,如圖,還停留在5.1階段,也找不到我想要的,於是果斷放棄了。Android SDK Search也還行。下面重點介紹Android SDK Search 外掛和androidxref。

這裡寫圖片描述

Android SDK Search

在 Android 開發或者原始碼分析時,一般會去檢視 Google 官方提供的 Android API,如果希望深入瞭解 API 實現的細節,當然最好的方法就是去看原始碼了。對於線上 API 文件,如果在檢視時,還能夠檢視到原始碼那當然是最好不過的。在 Chrome 瀏覽器下,可以安裝 Android SDK Search 擴充套件程式來達到這個目的,該擴充套件程式在 Chrome網上應用店截圖如下所示。安裝完該擴充套件程式後,再次搜尋 Android API 後,會在相應的搜尋結果後增加一個 view source連結。例如搜尋 Activity 類,結果如圖 4 所示。點選 view source連結,就可以開啟 Activity類的原始碼,如圖所示,從網頁中可以看出其實是連結到了 Google 的 Android 原始碼的 Git

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

AndroidXRef

AndroidXRef(http://androidxref.com/)專案提供 Android 原始碼的交叉索引,可以快速的搜尋符合特定條件的 Android 原始碼,後臺是基於 OpenGrok 引擎,OpenGrok是一個快速,便於使用的原始碼搜尋引擎與對照引擎,它能夠幫助我們快速的搜尋、定位、對照程式碼樹。AndroidXRef 提供了完整的 Android kernel原始碼的索引。在 AndroidXRef 主頁的右側顯示了可用的原始碼版本,如圖所示,
點選相應的原始碼版本連結

這裡寫圖片描述

就可以進入對應的原始碼分支,如圖所示,我進入6.0的最新分支:

這裡寫圖片描述

上圖右側提供在特定目錄下搜尋,例如在分析 Framework原始碼時,可以選擇 frameworks 目錄,這樣可以減少搜尋範圍,縮短搜尋時間,能夠更加精確地定位到需要的原始碼。左側是提供了一些搜尋的條件,其意義如下(在指定的 Project(s)下):

  • Full Search: 進行全文搜尋,會匹配所有的單詞、字串、識別符號以及數字等,例如在frameworks 下通過 Full Search 搜尋”mediacodec“

這裡寫圖片描述

點選”search“,會顯示所有包含mediacodec字元(忽略大小寫)的結果,即使是註釋也會顯示出來,如下圖,點選對應的連結會開啟包含mediacodec所在的資料夾

這裡寫圖片描述

點選左側檔名如 TrackDecoder.java連結會開啟包含mediacodc字串檔案;

這裡寫圖片描述

其他依次類推,點選右側每一行的搜尋結果連結同樣會開啟相相應的檔案內容;

  • Definition:搜尋符號定義相關的程式碼,例如搜尋 ondraw 函式的定義,顯示結果如圖

這裡寫圖片描述

提示你是否要找onDraw,onChildDraw等方法,我們點選onDraw,立刻跳轉到如下頁面:

這裡寫圖片描述

從搜尋結果可以看到,所有onDraw方法的類都會列出來,到第6頁,找到我們熟悉的TextureView,點選進去

這裡寫圖片描述

  • Symbol:搜尋符號,例如可以搜尋類中的成員變數等,下圖顯示了通過 Symbol 搜尋FEATURE_NO_TITLE的結果

這裡寫圖片描述
平時我們在this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉標題欄,這個FEATURE_NO_TITLE就是在Window.java中的,
本文來自逆流的魚yuiop,原文連結:http://blog.csdn.net/hejjunlin/article/details/53454514

  • File Path:搜尋原始碼檔名中包含給定字串的檔案,例如想要搜尋檔名包含mediacodec的原始碼檔案,則可以在 File Path 中填入 mediacodec 進行搜尋,結果如下所示

這裡寫圖片描述

這剛好就是我相要的,比起在IDE中一個一個看,這裡這個功能不得不說6的飛起。

  • History:這個幾乎沒有用,用處肯定也不大,我嘗試過各種搜尋。

上面只是單一的搜尋,如果是多個條件呢?這裡依然滿足,
如搜尋mediacodec.cpp中的start函式,如圖所示:

這裡寫圖片描述

由於AndroidXRef 使用的是 OpenGrok 引擎,因此還支援一些其他的搜尋方式:在【http://androidxref.com/6.0.0_r5/help.jsp】,寫的相當詳細,感興趣的同學可以看看。

第一時間獲得部落格更新提醒,以及更多android乾貨,原始碼分析,歡迎關注我的微信公眾號,掃一掃下方二維碼或者長按識別二維碼,即可關注。


這裡寫圖片描述

如果你覺得好,隨手點贊,也是對筆者的肯定,也可以分享此公眾號給你更多的人,原創不易