1. 程式人生 > >android原始碼編譯(ubuntu16.04 64位)

android原始碼編譯(ubuntu16.04 64位)

編譯步驟

1. 原始碼下載;
2. 構建編譯環境;
3.編譯原始碼;
4.執行.

編譯之前首先要下載和安裝repo和gitt工具。

repo和git

Google採用Git對AOSP專案進行多倉庫管理.
為了方便需要,對git語句進行了封裝,也就形成了repo.

建立編譯資料夾

$ mkdir source
$ cd source

注意,這個資料夾所在的磁碟空餘要大於100G,編譯後需要很大的空間。

初始化倉庫

$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

使用的清華的映象伺服器。

下載程式碼

$ repo sync

同步的時間很長,建議晚上睡覺前去同步。大概需要幾個小時。

安裝JDK

AOSP開源中,主分支使用Ubuntu長期版本開發和測試的,因此也建議你使用Ubuntu進行編譯,下面我們列出不同版本的的Ubuntu能夠編譯那些android版本:

Android版本 編譯要求的Ubuntu最低版本
Android 6.0至AOSP master Ubuntu 14.04
Android 2.3.x至Android 5.x Ubuntu 12.04
Android 1.5至Android 2.2.x Ubuntu 10.04

對應的sdk版本:

Android版本 編譯要求的JDK版本
AOSP的Android主線 OpenJDK 8
Android 5.x至android 6.0 OpenJDK 7
Android 2.3.x至Android 4.4.x Oracle JDK 6
Android 1.5至Android 2.2.x Oracle JDK 5

*本次使用OpenJDK 8

$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk

安裝依賴的庫

$ sudo apt-get update
$ sudo apt-get install git-core gnupg flex bison gperf build-essential
$ sudo
apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 $ sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache $ sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

開始編譯

編譯目標格式說明

編譯目標的格式:BUILD-BUILDTYPE,比如上面的aosp_arm-eng的BUILD是aosp_arm,BUILDTYPE是eng.

BUILD指的是特定功能的組合的特定名稱,即表示編譯出的映象可以執行在什麼環境.其中,aosp(Android Open Source Project)代表Android開源專案;arm表示系統是執行在arm架構的處理器上,arm64則是指64位arm架構;處理器,x86則表示x86架構的處理器;此外,還有一些單詞代表了特定的Nexus裝置,下面是常用的裝置程式碼和編譯目標

$ source build/envsetup.sh
$ lunch aosp_arm64-eng
============================================
PLATFORM_VERSION_CODENAME=Q
PLATFORM_VERSION=Q
TARGET_PRODUCT=aosp_arm64
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm64
TARGET_ARCH_VARIANT=armv8-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=arm
TARGET_2ND_ARCH_VARIANT=armv8-a
TARGET_2ND_CPU_VARIANT=generic
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.4.0-131-generic-x86_64-Ubuntu-16.04.5-LTS
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=PI
OUT_DIR=out
============================================
$ make -j8

通過-j引數來設定參與編譯的執行緒數量,以提高編譯速度.比如這裡我們設定8個執行緒同時編譯。

需要注意的是,參與編譯的執行緒並不是越多越好,通常是根據你機器cup的核心來確定:core*2,即當前cpu的核心的2倍。

執行成功的結果:
image.png

我這編譯了四個小時。。。。

執行模擬器

$ source build/envsetup.sh
$ lunch

lunch時,選擇剛才設定的目標版本。

$ emulator

執行結果:

image.png

不知道為什麼是個黑屏的,不過好歹是編譯沒問題了。繼續研究!!