【轉】如何閱讀android源碼
有一次當我打開grepcode 的時候,顯示了503,我以為只是短期的服務器錯誤,沒想到持續到現在了...
相同的體驗還有
其實還有些大大小小的站也關閉了,很憂傷...
好了,回到主題,本篇主要講如何閱讀 Android framework 層的源碼。
看下 Android 的整體架構:
關註本號的大多數同學都是做應用層的,所以對我們來說一般只要看到Framework 的源碼:
比如:AMS,WMS,PMS 等...包括上周推送的 AccessibilityService 源碼,以及 Activity 生命周期是如何回調的,都涉及到該類知識。
本篇文章不討論,能夠下載整個幾十G的源碼,修改編譯後,導入到 AS的方式,成本比較高,可以自行搜索。
1
在線查看
在線查看,這個方式一般適合有針對性的查看某個類:
網站1
http://androidxref.com/
你可以查看各個版本的源碼。
給大家錄制個gif:
網站2
https://www.androidos.net.cn/sourcecode
也比較方便,還是錄個gif 吧:
2
我要在 AS 中看
在線查看一般都是比較精確要看哪個類的時候,並不能滿足我們日常快速查看的需求。
例如我忽然想看下 startActivity 的流程,總不能還在線一個個類搜索吧,太慢了。
其實多數hide API的類源碼,我們都下載下來了,不信你打開sdk 文件夾。
比如 ContextImpl 這個類:
包括 AMS 這些類,其實源碼中都包含,只是在對應的android.jar 中缺少這些class 文件而已。
所以我們可以將sdk 中使用的android.jar 替換為完整的jar。
去哪找完整的jar 呢?自己編麽?
自己編譯成本是不是過高了,這麽多人有需求,那麽 github 上面肯定有啦。
https://github.com/anggrayudi/android-hidden-api
選擇對應的版本,下載對應的jar 文件。
然後替換即可,例如我這裏替換了android-26下的jar。
你可以將原本的改下命名保留,然後將剛下載的復制過去即可。
當你完成這些操作,AS 會自動感知到發生的變化,然後重新建立索引,稍等下就好了。
註:如果你擔心有什麽副作用,可以選擇一個不常用的版本替換,比如你們日常使用26,你可以將25的進行替換,新建一個module compileSdk=25就可以查看了。
然後你就可以在 Android Studio 中來放肆的查看源碼了:
偶爾會有一兩個類找不到,那麽你就可以配合在線查看的方式去看了。
3
我要自己下載framework 源碼查看
當然了,自己下載源碼來查看肯定是最靠譜的方式,但是自己下載有兩個問題。
1. 在哪裏下載呢?
2. Android 源碼那麽大,可以只下載framework 部分麽?
3. 如何閱讀
官方地址:
https://android.googlesource.com/
如果你的網絡夠給力,直接下載。
清華大學鏡像地址:
https://aosp.tuna.tsinghua.edu.cn/
當然我們並不希望下載完整的源碼,下載下來我也不知道怎麽編譯。
所以我們只下載自己需要的部分:
git clone https://aosp.tuna.tsinghua.edu.cn/platform/frameworks/base
當然github 也有地址:
https://github.com/aosp-mirror/platform_frameworks_base
也可以提供下載。
相信到這裏,你肯定能下載下來一份frameworks源碼!
找個稱手的工具
源碼下來了,如何更方便自己閱讀呢?
那就需要一個稱手的軟件,在windows 下可以使用`source insight`。
作為 MAC 用戶很憂傷。
以下內容針對 MAC 用戶,windows 用戶去就使用`source insight`吧。
1. sublime
sublime 也算是我非常喜歡的一個文本編輯器,當然功能非常強大,你可以給它安裝個ctags 插件,然後用來查看源碼。
最終效果大概是這樣的:
由於大家版本都不同,如何安裝自己搜索啦,關鍵詞sublime 查看源碼
2. UnderStand
最終的效果是這樣的:
記得導入後等它index 完畢,快捷鍵什麽的,自己去摸索吧。
功能非常強大,可以生成各種圖。
缺點就是有點卡。
個人非常推薦替換android.jar 的方式,當然也建議大家嘗試摸索下上述軟件。
如果你有更好的方式,歡迎留言~
最後 wanandroid.com 也在開發在線源碼閱讀的能力,給大家多增加一個備選方案!
參考
https://github.com/foxleezh/AOSP/issues/1
原文連接:https://kuaibao.qq.com/s/20180718G08DV600?refer=cp_1026
【轉】如何閱讀android源碼