Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 在macOS 10.12上編譯Android 5.1

在macOS 10.12上編譯Android 5.1

編輯:關於Android編程

在macOS 10.12上編譯Android 5.1:官方文檔雖然也有介紹,但是macOS平台上的編譯環境問題還存在很多坑。本文介紹下如何在在macOS 10.12 上編譯 Android 5.1源碼,導入源碼到Android Studio中,把系統燒錄到Nexus6手機中。

搭建編譯環境

創建分區

AOSP源碼需要一個支持大小寫敏感的文件系統,100G是至少要的。官網有詳細的介紹,這裡簡單列一下。

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

然後掛載這個分區:

$ hdiutil attach ~/android.dmg -mountpoint /Volumes/android;

切換shell

Android的相關編譯只能是使用bash.

$ chsh -s /bin/bash

重啟終端。

安裝Xcode

1、這裡需要兩個Xcode,可以用命令切換需要使用的Xcode,會有不同的用處。
- 去AppStore下載最新的Xcode
- 到這裡下載5.1.1的Xcode

2、創建一個/Developer/SDK文件夾,從Xcode5.1.1中把MacOSX10.8.sdk從Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/復制到 /Developer/SDK中。
3、從Xcode5.1.1.dmg復制Xcode.app 到 /Developer目錄中。
4、從AppStore下載的最新版Xcode會默認放在/Applications目錄中
5、給兩個版本的Xcode都安裝command line tools

$ sudo xcode-select -switch /Developer/Xcode.app
$ xcode-select --install
$ sudo xcode-select -switch /Applications/Xcode.app
$ xcode-select --install

安裝JDK

編譯Android5.1需要jdk1.7,去官網下載.
如果有切換多個版本的jdk需求的話,可以使用jenv這個工具,參考在OS X中使用jEnv管理多個Java版本

安裝其他軟件

1、安裝MacPorts,需要去官網下載對應版本的MacPorts
2、配置port命令環境變量

$ export PATH=/opt/local/bin:$PATH

3、下載依賴包

$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

下載源碼

直接去google官方下載會很慢
1、首先下載 repo 工具。

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可訪問,可以用下面的:
## curl https://storage-googleapis.proxy.ustclug.org/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

2、在之前創建的大小寫分區上建立一個工作目錄,之後源碼下載和編譯都在這裡進行。

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY

3、初始化倉庫

$ repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
## 如果提示無法連接到 gerrit.googlesource.com,可以編輯 ~/bin/repo,把 REPO_URL 一行替換成下面的:
## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'

4、選擇某個特定的 Android 版本,我選擇的是android-5.1.1_r14,build號是LMY48M,等會用這個build號下載對應的驅動包,燒錄到nexus真機時會用到。

$ repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-5.1.1_r14

5、同步源碼樹

$ repo sync

源碼下載完後,如果沒有同步的需求的話,就可以把.repo目錄刪掉了,防止編譯時磁盤空間不夠用。

下載驅動

燒錄到真機時需要用到,默認只是用模擬器的話,可以跳過這步。
在https://developers.google.com/android/nexus/drivers中找到對應設備與源碼分支的硬件驅動。剛才選擇的源碼分支所對應的build碼是LMY48M,因此,就下載此代號的驅動程序即可。
下載得到的是三個tgz文件,我們只需依次解壓三個文件,得到的是三個shell腳本文件,我們先將其置於源碼根目錄中。
依次執行這3個腳本將在源碼根目錄中生成一個vendor文件夾。


編譯

設置文件描述符限制

在macOS中,默認限制的同時打開的文件數量很少,不能滿足編譯過程中的高並發需要,因此需要在shell中運行命令:

$ ulimit -S -n 1024

環境設置

在源碼根目錄下調用下面的命令:

$ source build/envsetup.sh

選擇設備

因為我編譯後需要燒錄到Nexus6上,所以選擇aosp_shamu-userdebug

$ lunch aosp_shamu-userdebug

如果不需要燒錄到真機上的話,用默認的aosp_arm-eng類型就可以了。

開始編譯

因為本機CPU的內核是8核的,所以開16個線程加快編譯。

$ make -j16

編譯成功後,會有類似下面的日志:

#### make completed successfully (30:28:08 (hh:mm:ss)) ####

編譯成功的結果都在out目錄中。
如果lunch的是aosp_arm-eng類型,就可以用$ emulator命令刷到模擬器了。


源碼導入到Android Studio中

為了方便查看源碼,可以把代碼導入到AS中。目前看來,只能支持Java的跳轉,對c++的支持不太好。
為了讓AS理解代碼的符號和源碼樹的結構,需要用如下命令生成一個android.ipr工程配置文件。

$ mmm development/tools/idegen/
$ development/tools/idegen/idegen.sh

大約需要十幾秒的時間,就能在源碼根目錄下生成android.ipr和android.iml了。
用AS打開android.ipr就能導入整個源碼了。
如果要支持跳轉的話,還需要做些配置


刷機

Nexus6手機在打開USB調試,連接電腦後允許調試這台手機,並且在設置中打開“允許 OEM 解鎖”。然後令手機進入recovery模式,在關機下,輸入如下命令即可:

$ adb reboot bootloader

執行如下命令刷機:

$ fastboot -w flashall

刷機成功後,手機會自動重啟,新鮮出爐的系統終於跑起來了。
刷機過程中也出現過變磚的情況,可以試一下這個教程,親測有效。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved