天天看點

Mac 10.12 編譯 Android 源碼

Android 源碼系列文章:

Mac 10.12 快速下載下傳 Android 源碼

Mac 10.12 編譯 Android 源碼

使用 IntelliJ 檢視 Android 源碼

使用 IntelliJ Debug Android 源碼

環境準備

官方文檔https://source.android.com/source/initializing.html

這裡隻講 Mac 10.12 的環境配置, 其他的我沒有嘗試過, 不好描述

官方編譯環境配置需求https://source.android.com/source/requirements.html

Mac 10.12 編譯 Android 源碼
Mac 10.12 編譯 Android 源碼

我們需要的編譯的是 Android6.0, 是以我們需要 Xcode , Command Line Tool 以及 JDK 7

關于 Xcode 的版本問題, 上面說的是4.5.2 ,其實在 Max 10.12 上是根本安裝不了這麼低的版本的.

我這邊使用的是 Xcode 8, 同樣編譯成功, 是以 Xcode 版本不是問題

根據官方文檔, 我們還需要安裝一些其他的依賴

安裝 Xcode command line tools :

這個一般 Mac 使用者都裝過

安裝 MacPorts

到 MacPorts 的官網 https://www.macports.org/install.php 下載下傳安裝即可

安裝完後, 需要配置環境變量如下:

将上面這句話, 複制到.bash_profile 中即可.

通過 MacPorts 安裝其他依賴

在 terminal 中執行如下指令即可

POSIXLY_CORRECT= sudo port install gmake libsdl git gnupg
           

設定同時打開檔案數量限制

将上面這句話, 複制到.bash_profile 中即可.

到這裡官網文檔上說的相關環境配置已經安裝好了. 接下來可以嘗試去編譯看看

第一次編譯

我們在 Android 源碼目錄下執行如下清理指令:

make clobber
           

如果按照上面的配置的話, 會出現如下錯誤:

build/core/combo/mac_version.mk:38: *****************************************************
build/core/combo/mac_version.mk:39: * Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk
build/core/combo/mac_version.mk:40: *****************************************************
build/core/combo/mac_version.mk:42: *** Stop..  Stop.

** Don't have a product spec for: 'aosp_x86'
** Do you have the right repo manifest?
           

我前面說過, 我們使用 Xcode 8 是沒有問題的, 但是這裡提示我們缺少相應的 MacOsX sdk

這個 sdk 的目錄在 Xcode 的應用程式包裡面, 目錄如下:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
           

打開發現這裡隻用

MacOSX10.12.sdk

是以我們需要下載下傳其他的 sdk 放到這個檔案夾下面

我是在這個網站下下的, 沒有任何問題 https://github.com/phracker/MacOSX-SDKs/releases

我們編譯的是 Android 6.0 可以下 10.9 10.10 10.11 的都可以, 我嘗試或10.9 和 10.11 的都編譯通過了.

我們把 sdk 下下來, 解壓, 并且放到 Xcode 的相應目錄下面. 然後建立 名為

MacOSX10.11.sdk

的快捷方式入下圖:

Mac 10.12 編譯 Android 源碼

隻要執行如下指令即可

sudo ln -s MacOSX10. MacOSX10..sdk
           

加入 MacOSX 的 sdk 後, 我們還需要修改一個檔案, 位置如下

我們打開這個檔案, 發現是一些mac 的環境校驗

這個檔案我們隻要修改一行, 修改為下圖那樣子就可以了:

Mac 10.12 編譯 Android 源碼

自此 Mac 編譯 Android 源碼的環境配置算是真的結束了.

第二次編譯

清理

我們在 Android 源碼目錄下執行如下清理指令:

make clobber
           

沒有任何異常

設定環境

source build/envsetup.sh
           

沒有任何異常

選擇編譯目标

lunch
           

執行 lunch 指令後, 會輸出一個清單讓我們選擇

Mac 10.12 編譯 Android 源碼

我這邊是計劃, 吧編譯好的 rom 直接刷到 N5手機上的, 是以這裡我選了 aosp_hammerhead_userdebug

這裡來簡單說一說 清單中各項是什麼意思,

其實

lunch

指令的格式是

lunch BUILD-BUILDTYPE

如果我們後面沒有輸入

BUILD-BUILDTYPE

則會彈出一個清單讓我們選擇

我們就以

aosp_hammerhead_userdebug

來看

BUILD-BUILDTYPE

aosp_hammerhead

BUILD

userdebug

BUILDTYPE

hammerhead

其實是 N5 手機的别名, 是以這裡我才會選這個

什麼是BUILD
BUILD指的是特定功能的組合的特定名稱,即表示編譯出的鏡像可以運作在什麼環境.其中,aosp(Android Open Source Project)代表Android開源項目;arm表示系統是運作在arm架構的處理器上,arm64則是指64位arm架構;處理器,x86則表示x86架構的處理器;此外,還有一些單詞代表了特定的Nexus裝置,下面是常用的裝置代碼和編譯目标,更多參考官方文檔
什麼是BUILDTYPE
BUILD指的是特定功能的組合的特定名稱,即表示編譯出的鏡像可以運作在什麼環境.其中,aosp(Android Open Source Project)代表Android開源項目;arm表示系統是運作在arm架構的處理器上,arm64則是指64位arm架構;處理器,x86則表示x86架構的處理器;此外,還有一些單詞代表了特定的Nexus裝置,下面是常用的裝置代碼和編譯目标,更多參考官方文檔
裝置型号 裝置代碼 編譯目标
Nexus 6P angler aosp_angler-userdebug
Nexus 5X bullhead aosp_bullhead-userdebug
Nexus 6 shamu aosp_shamu-userdebug
Nexus 5 hammerhead aosp_hammerhead-userdebug

如果不需要刷入到手機上的話,選擇 arm 或者 x86 的即可

開始編譯

通過make指令進行代碼編譯,該指令通過-j參數來設定參與編譯的線程數量,以提高編譯速度.比如這裡我們設定8個線程同時編譯:

參與編譯的線程并不是越多越好,通常是根據你機器cup的核心來确定:core*2,即目前cpu的核心的2倍.

比如我的 mac 是4核心 4線程的, 所有使用8個線程編譯最好

編譯一個多小時後, 看到

### make completed successfully (01:18:45(hh:mm:ss))

表示編譯成功了, 如下圖:

Mac 10.12 編譯 Android 源碼

運作模拟器

如果我們之前選擇的是

aosp_arm_eng

這些的話, 那麼可以直接運作如下指令啟動虛拟機

source build/envsetup.sh
lunch(選擇剛才你設定的目标版本,比如這裡了我選擇的是)
emulator
           

如果我們是編譯後立即運作虛拟機的話, 由于之前執行過 source 和 lunch 指令, 這裡隻需要執行

emulator

指令

我這邊選擇的是

aosp_hammerhead-userdebug

電腦環境不對, 等了好久, 也沒看到開機界面.

下載下傳驅動

源碼編譯好後, 接下來我們需要吧 rom 刷入到 N5 手機上了.

别急着刷, 這裡我們還需要針對我們的 AOSP 版本, 選擇 N5 手機的相應驅動.

我們下載下傳的是

android-6.0.1_r77

Mac 10.12 編譯 Android 源碼

看上圖, 編号是

M4B30Z

我們在這個網站中https://developers.google.com/android/drivers搜尋M4B30Z即可, 如下圖:

Mac 10.12 編譯 Android 源碼

我們把上面三個檔案下載下傳下來, 并解壓到源碼目錄下,

其實就是三個 shell 腳本檔案, 如下圖:

Mac 10.12 編譯 Android 源碼

然後我們在 termianl 中依次執行者三個檔案,例如:

$ ./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目錄。

依次将驅動搞定之後,按照前面的步驟再次編譯, 這次編譯會很快的, 别急.

開始刷機

再次編譯完後, 開始使用 fastboot 刷機了

插上手機, 執行如下指令:

#手機連上電腦的情況下
adb reboot bootloader
#cd 到源碼編譯輸出的目錄
fastboot -w flashall
           

等一會, 手機刷完重新開機後就是自己的編譯的 Android 系統了

Mac 10.12 編譯 Android 源碼

編譯完源碼後, 接下來該仔細看看 android 源碼了, 使用 IntelliJ 檢視 Android 源碼