首發公衆號:Android程序員日記
作者:賢榆的榆
如果你覺得有幫助歡迎關注、讚賞、轉發
閱讀時間:2616字 6分鐘
很早就像自己搭一個Android源碼閱讀環境,折騰了幾次無果,就擱置了。最近有點閒暇時間,再加上也覺得是時候更深刻的認識Android系統了,所以再折騰了一次,沒想到成功了,而且是用AndroidStudio閱讀,還是那個熟悉的界面,還是那個熟悉的快捷鍵,哈哈,你也試試?
首先呢,之前有研究過用AndroidStudio閱讀源碼的,應該都知道,如果想用AS閱讀Android源碼差不多分這樣四個步驟
嘗試過的朋友就知道,編譯源碼這個步驟應該是一個比較讓人難過的過程。可能你的編譯花的時間比你下載還長。不過在嘗試了很多次之後,我也完美的搭好了AS閱讀源碼的環境。下面我就告訴大家如何做到不用編譯就能導入AS閱讀Android源碼。
AOSP(Android Open Source Project)初始化包下載地址:
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
將該網址複製到瀏覽器即可下載,迅雷好像不能使用,至少我的沒用。另外需要注意的是,下載的過程中,不要合上電腦。我都下載了18g就因爲合了一下電腦,結果就要從頭再來了。
當然源代碼下載,除了直接下載這個初始化包,你也可以先裝repo工具,然後用repo同步。反正無論是哪種方式,中間都不能斷。
關於源碼下載更多信息可以查看下面兩個網站:
過清華大學開源軟件鏡像站:
*https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ *
google官網:
https://source.android.com/source/downloading.html
差不多下載最新的初始化包,你需要好幾個小時,網速不好,甚至要10幾個小時。那麼在這個過程中我就可以把後面同步和檢出代碼需要的的repo工具安裝一下,在命令行中執行如下代碼,(我的是mac,win的話,大家可以google一下對應的教程,應該會有很多)
mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
下載完成以後會得到一個37g的以aosp-latest命名的tar文件,然後將其解壓可以看到裏面有一個.repo
的隱藏文件(mac 下載查看隱藏文件的快捷鍵Command+Shift+ .
)
接下來使用命令行進入到解壓的根目錄然後運行repo sync
,然後就可以同步到最新的分支,並檢出其master分支。
當然你也可以不同步直接使用 repo sync -l
來檢出repo裏面的源碼項目。
檢出後的效果是這樣的:
其實之所以需要編譯,這個和我們的Android項目是一個道理,我們從github上拉下來的開源Android項目也是沒有.iml等配置文件的,需要我們自己再編譯一邊,才能讓這個項目裏的個文件在AS關聯起來。
那麼在這裏之所以不用編譯,不是真的無需編譯。而是有一位簡書ID是difcareer的小夥伴已經幫我們把各個版本需要的AS配置文件已經編譯好,我們只需要將它下載下來放到項目的根目錄就ok了。
as配置文件git地址:
https://github.com/difcareer/AndroidSourceReader
注:
如果你忘了自己源碼檢出的版本可以通過如下方式查看:
根據目錄’/build/core/version_defaults.mk’ 打開version_defaults.mk文件,然後找到PLATFORM_SDK_VERSION
這個關鍵字的值,就可以在下表中找出相應的版本。
如果是28 當然就是Android 9.0了
準備工作已經做完了下面就可以像導入一個Android項目一樣導入AOSP目錄了。進入AOSP目錄選擇被識別出來的.ipr
文件,然後點擊open即可。
這裏有兩個個問題需要注意一下:
第一次導入的時候,可能你看到的只有那幾個剛纔放入的配置文件,而看不到其他的目錄,這個時候需要點擊File->Invalidate Cashes/Restart...
,讓AS重新啓動編譯一下項目。
這個編譯的狀態差不多會持續10幾分鐘。然後將右邊文件目錄切換到Project模式下:
如果出現循環執行任務Scanning file to index....
不動
解決辦法如下(Open module setting --> Modules --> 找到gen文件夾 --> 選擇Resources
)
那麼接下來我們就可以自由的翱遊在Android源碼的海洋了,讓我們來看一下吧!
最後,要感謝一下「代碼GG之家」的明哥,8年Android手機開發的老大哥。在源碼閱讀環境搭建和源碼閱讀方式與技巧上都給我很大的幫助。這裏我把明哥在星球裏的回答貼出來分享一下:
另外,我也強烈推薦明哥的「Android答疑解惑」星球。**畢竟,成長的道路上,我們需要弄清的不是距離起點有多遠,而是距離下一個終點有多近。**我相信明哥會是那個讓能夠告訴你離終點有多近的人。
系列文章
- 「Do.006」Android實戰項目(1)——我想說「開始吧」
- 「Do.007」Android實戰項目(2)——使用Github進行版本管理
- 「Do.008」Android實戰項目(3)——Git 分支管理模型
- 「Do.009」Android實戰項目(4)——AndroidStudio插件推薦(磨刀)
- 「Do.014」Android實戰項目(5)—— gradle 配置release與debug環境分離
其他