本文首發於微信公衆號「劉望舒」html
關聯繫列
Android AOSP基礎系列
Android系統啓動系列
應用進程啓動系列
Android深刻四大組件系列
Android深刻理解Context系列
Android深刻理解JNI系列
Android解析WindowManager
Android解析WMS系列
Android解析AMS系列
Android包管理機制系列
Android輸入系統系列前端
在上一篇文章Android AOSP基礎(三)Android系統源碼的整編和單編中,咱們對系統源碼進行了編譯,這篇文章咱們接着來學習如何將系統源碼導入到編輯器中,以便於查看和調試源碼。關於查看源碼,可使用Android Studio、Eclipse、Sublime、Source Insight等軟件,這裏我推薦使用Source Insight,可是有的同窗可能不是很習慣,並且Source Insight是Windows平臺的軟件,Mac平臺用不了,那麼使用Android Studio是一個不錯的選擇,並且使用Android Studio還能夠調試源碼。java
在《Android進階解密》的第一章,我講解了Source Insight如何導入系統源碼,可能有的同窗沒有買這本書,這裏再來說一遍。 Source Insight只能查看源碼,不能調試源碼,若是隻想在Source Insight中查看源碼,能夠直接從百度網盤:pan.baidu.com/s/1ngsZs 將源碼下載下來。若是想在Android Studio中查看源碼,那麼最好仍是在Linux環境下將AOSP源碼下載下來。linux
安裝軟件後,首先要新建源碼項目。經過菜單項Project→New Project會彈出提示框。 android
上圖箭頭指向的Browse按鈕來選擇本地系統源碼所在的路徑,好比個人系統源碼路徑爲:D:/Android/android-8.0.0_r1 。選擇好加載路徑後點擊OK按鈕會進入「Add and Remove Project Files」界面,在這個界面能夠向項目中添加整個Android系統源碼,也能夠只把源碼部分目錄添加到項目中,之後再根據須要添加其餘目錄。若是向項目添加整個Android系統源碼加載時會很是慢,這裏咱們只添加以下源碼目錄:frameworks/、libcore/、packages/、system/、art/和libnativehelper/,這幾個目錄基本上能夠知足平常的系統源碼閱讀了,以下圖所示。程序員
Source Insight的定位文件功能十分強大,咱們只須要知道源碼文件名就能夠輕鬆找到它,好比咱們要找MediaPlayer.java,只要在文件搜索框輸入MediaPlayer.java便可:ubuntu
Source Insight另外一個好用的功能就是全局搜索,默認快捷鍵爲:CTRL+/,或者點擊最上面工具欄相似R的圖標。在Search in的輸入選項中咱們能夠自定義搜索的範圍,好比咱們想查找全部Java文件中引用MediaPlayer類的狀況,就能夠像下圖同樣進行操做。 bash
固然,Source Insights的功能遠不僅以上幾種,相信隨着使用次數的增多,你就會熟練掌握它的大部分功能,這裏就不過多介紹了。微信
Source Insight導入源碼不須要對源碼進行編譯,可是Android Studio導入整個系統源碼須要對源碼進行編譯,生成AS的項目配置文件。ionic
若是你整編過源碼,查看out/host/linux-x86/framework/idegen.jar是否存在,若是不存在,進入源碼根目錄執行以下的命令:
source build/envsetup.sh
lunch [選擇整編時選擇的參數或者數字]
mmm development/tools/idegen/
複製代碼
若是沒整編過源碼,能夠直接執行以下命令單編idegen模塊:
source build/ensetup.sh
make idegen
複製代碼
關於Android系統源碼的編譯能夠查看Android AOSP基礎(三)Android系統源碼的整編和單編這篇文章。
idegen模塊編譯成功後,會在 out/host/linux-x86/framework目錄下生成idegen.jar,執行以下命令:
sudo development/tools/idegen/idegen.sh
複製代碼
這時會在源碼根目錄生成android.iml 和 android.ipr 兩個文件,這兩個文件通常是隻讀模式,這裏建議改爲可讀可寫,不然,在更改一些項目配置的時候可能會出現沒法保存的狀況。
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
複製代碼
因爲要將全部源碼導入AS會致使第一次加載很慢,能夠在android.iml中修改excludeFolder配置,將不須要看的源碼排除掉。等源碼項目加載完成後,還能夠經過AS對Exclude的Module進行調整。若是你的電腦的性能很好,能夠不用進行配置。 在android.iml中搜索excludeFolder,在下面加入這些配置。
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/kernel" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/test" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
<excludeFolder url="file://$MODULE_DIR$/.repo" />
複製代碼
在AS安裝目錄的bin目錄下,打開studio64.vmoptions文件,根據本身電腦的實際狀況進行設置,這裏修改成以下數值:
-Xms1024m
-Xmx1024m
複製代碼
若是你是在VirtualBox中下載的系統源碼,那麼將VirtualBox中的系統源碼拷貝到共享文件夾中,這樣源碼就會自動到Windows或者Mac上,若是你不知道如何設置VirtualBox共享文件夾,能夠查看Android AOSP基礎(一)VirtualBox 安裝 Ubuntu這篇文章。 經過AS的Open an existing Android Studio project選項選擇android.ipr 就能夠導入源碼,這裏我用了大概7分鐘就導入完畢。導入後工程目錄切換爲Project選項就能夠查看源碼。
因爲咱們下載的是9.0的AOSP源碼,SDK版本也應該對應爲API 28,若是沒有就去SDK Manager下載便可。 點擊File -> Project Structure-->SDKs配置項目的JDK、SDK。 建立一個新的JDK,這裏取名爲1.8(No Libraries),刪除其中classpath標籤頁下面的全部jar文件。
接着設置將Android SDK的Java SDK設置爲1.8(No Libraries),這樣Android源碼使用的Java就是Android源碼中的。
確保的項目的SDK爲源碼對應的SDK。
File -> Project Structure -> Modules中能夠經過Excluded來篩選代碼目錄,好比咱們選擇bionic目錄,點擊Excluded,bionic目錄會變爲橙色,bionic字段會出如今右側視圖中,說明該目錄已經被Excluded掉,通俗來說就是被排除在工程以外。若是不但願bionic目錄被Excluded掉,再次點擊Excluded,bionic目錄會變爲灰色。
這篇咱們學習了Source Insight和Android Studio導入系統源碼的方法,可是具體的查看源碼的方式沒有講解,這些須要讀者在使用中逐步去掌握,下一篇咱們會學習如何使用Android Studio去調試系統源碼。
分享大前端、Android、Java等技術,助力5萬程序員成長進階。