將AOSP源碼導入到Android Studio進行查看


生成iml和ipr文件

source build/envsetup.sh
lunch aosp_x86-eng # 或者直接輸入lunch,然后選擇對應的target
make idegen
development/tools/idegen/idegen.sh

說明:

  1. 執行source build/envsetup.sh./build/envsetup.sh是一樣的。
  2. 可以直接執行lunch aosp_x86-eng直接根據傳入參數進行構建,也可以輸入lunch根據提示進行選擇。
  3. 執行完lunch命令后直接執行make idegen即可,有些教程說需要先執行make命令,這是不需要的,我們只需要構建idegen模塊,不需要構建所有模塊。后者要花費很長時間,而且對機器性能要求很高。
  4. 命令執行過程中有些提示選項,如果沒有報錯導致中斷,可以暫時忽略。
  5. 有的教程說使用mmm development/tools/idegen/代替make idegen,如果你仔細了解AOSP構建系統,會清楚他們的功能是類似的。
  6. 執行development/tools/idegen/idegen.sh,可能會提示權限相關問題,如果沒有中斷程序可以暫時忽略,有的教程建議增加sudo前綴提升命令執行權限,這里不推薦,因為之前如果source build/envsetup.sh是以普通用戶執行的,所有的構建環境都是以普通用戶為前提的,提升權限可能會導致問題,比如java: 未找到命令
  7. 以上命令成功執行后會在根目錄生成android.iml/android.ipr,兩個文件。

將代碼導入到Android Studio

絕大部分人的AOSP源碼是放置到遠程Linux機器上的,如果本地機和遠程機間網絡帶寬很高,可以直接通過Samba服務器在本地機中訪問遠程機的AOSP源碼。網絡不是很好可以選擇在本地機上進行一個目錄,然后把android.iml/android.ipr以及需要查看的AOSP源碼目錄同步到該目錄中,同步方式有很多,比如FTP/rsync等。

如果使用rsync進行同步,可以參考以下命令:

rsync -az --progress --delete --exclude=".git" ${USER_NAME}@${IP}:/${REMOTE_DIR} ${LOCAL_DIR} # REMOTE_DIR->LOCAL_DIR
rsync -az --progress --delete --exclude=".git" ${LOCAL_DIR} ${USER_NAME}@${IP}:/${REMOTE_DIR} # LOCAL_DIR->REMOTE_DIR

如果使用FTP命令,由於文件數目較多,直接下載或者上傳目錄耗時比較長,可以考慮使用tar將需要的文件和目錄打包,然后再進行同步。

我選擇的是把android.iml/android.ipr以及frameworks目錄同步到本地。打開Android Studio,Open an Existed Project,選擇android.ipr,導入時間根據機器性能以及源碼規模相關,可能比較長。

  • android.iml文件中有目錄的配置,如果打開整個工程非常慢,可以把里面無關的目錄刪除或者改到excludeFolder中。
  • 如果代碼跳轉到jar包的反編譯文件中而不是導入的源碼中,可以File->Project Structure->Project Settings->Moudules->Dependencies,把Module source調整到最頂端(Alt+Up)。
  • Android Studio默認只能打開10個代碼文件,且文件打開多了以后顯示不開的文件還會被隱藏,需要點擊最右邊的箭頭才能查看。而最致命的是,如果不小心修改了某個文件,在標簽頁上,不會有任何的提示。File->Settings->Editor->General->Editor Tabs根據自己的習慣進行配置。
  • Android Studio只支持Java代碼,C++代碼只有最基礎的着色功能。
  • 如果想要支持斷點調試,按照如下步驟操作:
    • File->Project Structure->Project Settings->Project->Project SDK,選擇Android API .. Platform
    • Run->Edit Configurations->Add New Configuration->Android App,然后直接保存。
    • 此時可以使用Attach To Process進行調試。調試要注意源碼和手機版本匹配。service相關代碼需要attach到system_process進程。

另一種利用Android Studio查看AOSP源碼的方式

還有另一種不需要android.iml/android.ipr就可以查看AOSP源碼的方式:

  1. 使用Android Studio創建一個簡單的demo工程,確保編譯通過。
  2. app/build.gradle文件的android節點下增加如下配置,其中路徑是自己想查看的AOSP源碼路徑,可以是本地路徑也可以是遠程路徑:
    sourceSets {
        main.java.srcDirs += 'D:\\Code\\sync\\android-11.0.0_r27\\frameworks\\base\\services\\core\\java'
        main.resources.srcDirs += 'D:\\Code\\sync\\android-11.0.0_r27\\frameworks\\base\\core\\res\\res'
    }

當然這種方式如果在自己想要查看的路徑比較多時,自己手工配置路徑會比較麻煩。

參考資料


免責聲明!

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



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