Android源碼:Mac下載及編譯Android源碼(支持移動移動)

作為一個android開發從業者,如果我們想不停的進度,沒有android源碼怎么能行呢!眾所周知,Android開放源代碼master分支歷來都是在 Ubuntu Long Term Support (LTS) 版本中進行開發和測試,但您也可以使用其他 Ubuntu 分發版本。下面我們就在Mac上下載和編譯源碼。

參考鏈接(官方):

環境:http://source.android.com/source/initializing.html
下載:http://source.android.com/source/downloading.html 編譯:http://source.android.com/source/building-running.html

系統要求

Mac OS (Intel/x86)

Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具有 Xcode 4.5.2 和命令行工具

Android 5.x (Lollipop):Mac OS v10.8 (Mountain Lion),具有 Xcode 4.5.2 和命令行工具

Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat):Mac OS v10.6 (Snow Leopard) 或 Mac OS X v10.7 (Lion),以及 Xcode 4.2(Apple 的開發者工具)

Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich):Mac OS v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X v10.5 SDK

JDK

有關較低 Android 版本的預編譯路徑和安裝說明,請參閱安裝 JDK。

Android 7.0 (Nougat) - Android 8.0 (O):Ubuntu - OpenJDK 8;Mac OS - jdk 8u45 或更高版本

Android 5.x (Lollipop) - Android 6.0 (Marshmallow):Ubuntu - OpenJDK 7;Mac OS - jdk-7u71-macosx-x64.dmg

Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat):Ubuntu - Java JDK 6;Mac OS - Java JDK 6

Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu - Java JDK 5

Make

Android 4.0.x (Ice Cream Sandwich) 及更低版本需要將 make 3.82 還原到較低版本,以避免出現編譯錯誤。

主要軟件包

python.org 中提供的 Python 2.6 - 2.7

gnu.org 中提供的 GNU Make 3.81 - 3.82

git-scm.com 中提供的 Git 1.7 或更高版本

創建磁盤映像

我們可以直接在電腦磁盤上創建映像也可以在移動硬盤上,但是如果是校驗代碼,至少需要 100GB 可用磁盤空間;如果要進行編譯,則還需要 150GB。如果要進行多次編譯或使用 ccache,則需要更多空間。在Mac上的磁盤那么貴的前提下,我建議還是使用移動硬盤吧!

您可以使用磁盤映像在現有的 Mac OS 環境中創建區分大小寫的文件系統。要創建磁盤映像,請啟動磁盤工具,然后選擇“新建映像”。完成編譯至少需要 25GB 空間;更大的空間能夠更好地滿足未來的需求。使用稀疏映像有助于節省空間,而且以后可以隨著需求的增加進行擴展。請務必選擇“Case sensitive, Journaled”存儲卷格式。

image

您也可以通過 shell 使用以下命令創建磁盤映像:

#hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg

這將創建一個 .dmg(也可能是 .dmg.sparseimage)文件,該文件在裝載后可用作具有 Android 開發所需格式的存儲卷。
如果您以后需要更大的存儲卷,還可以使用以下命令來調整稀疏映像的大小:

 # hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage 

對于存儲在主目錄下的名為 android.dmg 的磁盤映像,您可以向 ~/.bash_profile 中添加輔助函數:

  • 要在執行 mountAndroid 時裝載磁盤映像,請運行以下命令:
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
  • 要在執行 umountAndroid 時卸載磁盤映像,請運行以下命令:
# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }

裝載 android 存儲卷后,您將在其中開展所有工作。您可以像對待外接式存儲盤一樣將其彈出(卸載)。

安裝所需程序包

可以參照官方文檔安裝就是。

設置文件描述符數量上限

在 Mac OS 中,可同時打開的文件描述符的默認數量上限太低,在高度并行的編譯流程中,可能會超出此上限。

要提高此上限,請將下列行添加到 ~/.bash_profile 中:

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

安裝 Repo

要安裝 Repo,請執行以下操作:

確保主目錄下有一個 bin/ 目錄,并且該目錄包含在路徑中:

mkdir ~/bin
PATH=~/bin:$PATH

下載 Repo 工具,并確保它可執行:

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

初始化 Repo 客戶端

必須使用之前創建的區分大小寫的文件系統,一般掛載的新的盤是在/Volumes/ 路徑下的

我分出來的區分大小寫的文件系統名字是android 所以我cd進去就ok了

  1. 創建一個目錄 mkdir XXX (XXX 是你自己取得名字)
    cd XXX

  2. 配置git信息

git config --global user.name "Your Name" 
git config --global user.email "you@example.com"
  1. 運行 repo init 以獲取最新版本的 Repo 及其最近的所有錯誤更正內容。您必須為清單指定一個網址,該網址用于指定 Android 源代碼中包含的各個代碼庫將位于工作目錄中的什么位置。
repo init -u https://android.googlesource.com/platform/manifest

如果遇到repo: command not found 問題 請在初始工作目錄輸入

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc 
export PATH=$PATH:$HOME/bin

第三步過程中可以通過梯子下載,由于首次更新非常大,可以使用國內鏡像下載。

由于所有代碼都是從隱藏的 .repo 目錄中 checkout 出來的,所以我們只保留了 .repo 目錄,下載后解壓 再 repo sync 一遍即可得到完整的目錄。

使用方法如下:

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下載初始化包
tar xf aosp-latest.tar
cd AOSP   # 解壓得到的 AOSP 工程目錄
# 這時 ls 的話什么也看不到,因為只有一個隱藏的 .repo 目錄
repo sync # 正常同步一遍即可得到完整目錄
# 或 repo sync -l 僅checkout代碼

此后,每次只需運行 repo sync 即可保持同步。 強烈建議您保持每天同步,并盡量選擇凌晨等低峰時間

Android Studio導入Android源碼

在AS的bin目錄下,打開studio64.vmoptions文件,修改成如下數值:

-Xms1024m
-Xmx1024m
生成AS項目配置文件

1、首先全局編譯一次。
2、查看out/host/linux-x86/framework/idegen.jar是否存在;
若已不存在,先執行下面命令以生成它:

source build/envsetup.sh
lunch [選擇剛全局編譯時的參數]
mmm development/tools/idegen/

3、執行以下命令以生成所需配置文件。

development/tools/idegen/idegen.sh
導入系統源代碼至AS

1、此時在根目錄下,就已經生成了android.ipr、android.iml,可以將整個源代碼導入AS。
2、(可選)設置模塊過濾
有些不想導入AS的模塊,可以通過在android.iml中加入excludeFolder,達到過濾效果。

<excludeFolder url="file://$MODULE_DIR$/.repo"/>
<excludeFolder url="file://$MODULE_DIR$/abi"/>
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
<excludeFolder url="file://$MODULE_DIR$/art"/>
<excludeFolder url="file://$MODULE_DIR$/bionic"/>
<excludeFolder url="file://$MODULE_DIR$/bootable"/>
<excludeFolder url="file://$MODULE_DIR$/out"/>
<excludeFolder url="file://$MODULE_DIR$/pdk"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilts"/>
<excludeFolder url="file://$MODULE_DIR$/sdk"/>
<excludeFolder url="file://$MODULE_DIR$/system"/>
<excludeFolder url="file://$MODULE_DIR$/tools"/>
<excludeFolder url="file://$MODULE_DIR$/trusty"/>
<excludeFolder url="file://$MODULE_DIR$/vendor"/>
...

第一次導入時間有點長,耐心等待。

取消默認JDK和SDK依賴

   我們導入完源碼后,我們就可以查看整個系統的源碼啦,但是我們在跳轉公共的類時,并沒有跳轉到frameworks目錄下對應的源碼類,而是jar包中的類,這不是我們想要的,我們需要讓其跳轉到相應的類中。我們就需要新建一個沒有任何jar庫的SDK給到系統源碼項目的依賴。 

那我們要怎么創建一個沒有jar的SDK呢?步驟如下:

  1. 右鍵項目名->Open Module Settings->Project->New(JDK)
    然后選擇SDKs->新建一個jdk->刪除Classpath目錄下的所有包并命名為1.8(No Libraries) 如下圖所示:


    屏幕快照 2019-01-16 上午3.53.22.png
  2. 選中Modules->Source->Excluded添加過濾,如下圖:


    屏幕快照 2019-01-16 上午4.13.17.png
  3. 再選擇Modules->Module SDK選擇對應的api版本,并刪除下面所有依賴包->然后通過"JARs or directores"依次只添加frameWork和external。

最后點擊apply->ok,大功告成,完成上面的步驟后,公共的類就直接指向系統的源碼啦。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容