Macbook Pro下載並編譯Android原始碼並匯入Android Studio

ChuckChenLw發表於2016-11-22

  最近嘗試下載並編譯Android的原始碼,過程比較曲折,所以特別的記錄一下。
  環境
  mac系統:OS X EI Captian 10.11.6
  Android原始碼:Android 7.0
  JDK: jdk 1.8.0_77
  
  下載原始碼
  step1:因為我的mac硬碟空間比較小,所以我直接在行動硬碟上操作的,如果mac的空間夠大也可以在內建硬碟操作。由於mac檔案系統模式預設是不區分大小寫的,但是AOSP託管在git上是區分大小寫的,所以這裡我們需要建立一個映象。具體操作如下:
  方法一:使用命令列(AOSP目前比較大,建議至少預留80G+的空間):
  

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g /Volumes/aosp/android.dmg

  生成映象的位置是可以自己定義的,我這裡是放在了行動硬碟中。如果需要更大的磁碟空間,可以用下面的命令列來改變磁碟映象的大小:

hdiutil resize -size <new-size-you-want>g /Volumes/aosp/android.dmg

  方法二:使用mac自帶的磁碟工具,選擇New Image,分配至少80G大小的空間;保證選擇格式為OSX 擴充套件(區分大小寫,日誌式)的卷。一定要選區分大小寫,日誌式
  Macbook Pro下載並編譯Android原始碼並匯入Android Studio
  
  這時在/Volumes/aosp/下會生成一個android.dmg的映象,雙擊這個映象,將其掛載。這樣在mac Finder中就可以看到我們剛剛的建立的映象了。

  Step2 Mac 系統下預設只能同時開啟 1024 個檔案,而在進行 Android 原始碼編譯時有可能會超出這個限制,因此需要解除這個限制。在~/.bash_profile中新增以下內容:

# set the number of open files to be 1024
ulimit -S -n 1024

  Step3 安裝repo及同步AOSP原始碼
  

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

  由於眾所周知的原因,我們如果直接使用官方下載會非常的困難,那麼我們可以考慮使用國內的源,比較好用的就是清華映象。按照清華源的步驟去同步就可以了:
  

cd  /Volumes/aosp/ #將當前路徑切換到剛剛掛載的的映象中
wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下載初始化包
tar xf aosp-latest.tar
cd AOSP
repo sync # 正常同步一遍即可得到完整目錄

  如果repo沒有配置環境變數,那麼需要把repo的絕對路徑加上,例如剛剛把repo下載到~/bin下了,那麼在同步時應該是~/bin/repo sync。安靜的等待原始碼下載同步完成。

  編譯原始碼
  step1 在原始碼的當前路徑下:
  

$ source build/envsetup.sh 

  如果不出意外會得到以下結果:

  Macbook Pro下載並編譯Android原始碼並匯入Android Studio

  step2:接下來就是根據裝置選擇target
  Macbook Pro下載並編譯Android原始碼並匯入Android Studio
  我這裡選擇的是5 aosp_x86-eng。每個選項對應的device可以在這裡檢視 如果打不開,我截了張圖,大家可以根據自己的情況選擇
  Macbook Pro下載並編譯Android原始碼並匯入Android Studio
  選擇好target後就可以直接進行編譯了
  不過在這之前你可能還需要下載驅動(如果只是想檢視原始碼也可以忽略該步)
將下載下來的檔案解壓到原始碼的根目錄會得到三個.sh的檔案,依次執行三個檔案,例如:

$ ./extract-broadcom-hammerhead.sh

The license for this software will now be displayed.
You must agree to this license before using this software.

Press Enter to view the licensels

回車後檢視license,翻到license最後,輸入I ACCEPT後回車,這時會將驅動檔案釋放到vendor目錄。

  step3:
 

$ make -j8

  使用make構建,該命令可以通過使用-jN引數來處理並行任務。此處的N,根據所用的計算機的硬體的核數來指定,一般N指定為CPU核心的1到2倍。接下來就是漫長的編譯過程,具體編譯時長得看機器的情況了。並且有可能出現各種問題,這個時候不要著急,可以根據錯誤日誌搜尋,一般都能找到解決辦法。解決之後,在接著執行上邊的make 命令就好,會繼續在你中斷的地方開始編譯。
  最後如果出現:
  

make completed successfully

  那麼恭喜你,編譯成功了,因為我這裡選擇的是模擬器的,所以可以通過

$ emulator

  直接啟動,剛剛編譯的系統。(如果沒有下載驅動,可能會卡在啟動頁面。)

  匯入Android Studio
  在編譯玩Android原始碼後,我們繼續編譯生成Android studio工程:

soruce build/envsetup.sh
mmm development/tools/idegen/
sudo ./development/tools/idegen/idegen.sh

  其中mmm development/tools/idegen/執行完成後會生成idegen.jar,而sudo ./development/tools/idegen/idegen.sh則會在原始碼目錄下生成IEDA工程配置檔案:android.ipr,android.iml及android.iws.這三個檔案
  android.ipr:通常是儲存工程相關的設定,比如編譯器配置,入口,相關的庫等
  android.iml:則是主要是描述了modules,比如modules的路徑,依賴關係等.
  android.iws:則主要是包含了一些個人工作區的設定.

  接下來,開啟Android Studio,點選File->Open,選擇剛才生成的android.ipr檔案即可,然後就是漫長的等待,注意此時是將原始碼完全匯入到AS中了,不出意外,你會覺得AS執行會卡頓。還需要我們忽略掉一些不經常使用的包。
  在Android Studio匯入成功之後,專案結構如下:
   Macbook Pro下載並編譯Android原始碼並匯入Android Studio
  紅色的表示已經被忽略了,沒有匯入,那麼也可以通過以下方法來對指定的包進行修改是否匯入:
  Macbook Pro下載並編譯Android原始碼並匯入Android Studio
  
  也可以直接在project Structure中進行修改:
  這裡寫圖片描述

  在修改完後,我們可以在android.iml可以看到,我們忽略匯入了那些包:
  這裡寫圖片描述

  如果熟悉了包的結構,就可以直接在該檔案中,完成忽略匯入的操作,是最快捷的方式。

  這樣我們就可以使用Android Studio閱讀原始碼了,在原始碼閱讀過程中可能會出現跳轉到SDK對應的方法中的問題,這個時候,需要先配置一下SDK,然後修改專案依賴就可以了。到這兒,就可以越快的擼原始碼了。Good Luck

相關文章