幾點(diǎn)說(shuō)明
- 為什么要使用Docker:
采用docker編譯我們可以在本地不配置任何環(huán)境妆兑,只要安裝docker魂拦,并下載docker鏡像就好了毛仪。我在其他機(jī)器想編譯,那我只需要把鏡像pull下來(lái)芯勘,運(yùn)行就好了箱靴。如果沒(méi)有我們想要的鏡像,我們可以自己配置荷愕,然后上傳到docker hub衡怀,留著以后什么時(shí)候需要就下載。這是一勞永逸的過(guò)程安疗。 - 為什么用Ubuntu:
首先編譯Android源碼必須使用 Linux 或 Mac OS抛杨。其次在AOSP開(kāi)源中,master
分支使用Ubuntu長(zhǎng)期版本開(kāi)發(fā)和測(cè)試的,因此也建議使用Ubuntu進(jìn)行編譯。
環(huán)境要求
- 操作系統(tǒng)要求
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 |
- JDK版本要求
Android版本 | 編譯要求的JDK版本 |
---|---|
Android 7.0 (Nougat) - Android 8.0 (O) | OpenJDK 8 |
Android 5.x (Lollipop) - Android 6.0 (Marshmallow) | OpenJDK 7 |
Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat) | Java JDK 6 |
Android 1.5 (Cupcake) - Android 2.2.x (Froyo) | Java JDK 5 |
- jdk版本切換
sudo update-alternatives --config java
sudo update-alternatives --config javac
Docker注意事項(xiàng)
關(guān)于docker的基礎(chǔ)知識(shí)以及如何使用我就不多說(shuō)了荐类,網(wǎng)上很多教程怖现。這里說(shuō)幾點(diǎn)編譯Android源碼時(shí)的注意事項(xiàng)
- docker 默認(rèn)給的內(nèi)存是2G,編譯Android源碼玉罐,在7.0以上需要使用jack-server來(lái)取代以往的編譯器工具屈嗤,它的內(nèi)存消耗比較大,通常需要4G以上吊输。這里就需要修改docker分配給容器的內(nèi)存大小饶号,run -m的形式只是限制內(nèi)存使用量,并不能增加璧亚。需要增加內(nèi)存需要在docker的偏好設(shè)置的高級(jí)選項(xiàng)中設(shè)置讨韭。
- 由于docker沒(méi)有設(shè)置USER環(huán)境變量會(huì)導(dǎo)致編譯失敗,需要手動(dòng)添加
export USER=$(whoami)
- docker掛在本機(jī)目錄
docker run -itv 需要共享的本機(jī)目錄:docker目錄 ubuntu:14.04 /bin/bash
編譯源碼
// cd到應(yīng)的源碼目路癣蟋,初始化編譯環(huán)境
1. source build/envsetup.sh
// aosp表示Android Open Source Project透硝,arm64表示是使用arm64 cpu的設(shè)備,eng表示engineer版本疯搅,其直接開(kāi)放了一些root等權(quán)限濒生。當(dāng)然直接使用lunch命令會(huì)列出所有可選的編譯目標(biāo)。
2. lunch aosp_arm64-eng
// 這里的j8表示可以開(kāi)啟8個(gè)線程來(lái)參與編譯源碼幔欧,這里指定的線程數(shù)一般應(yīng)該遵從cpu內(nèi)核數(shù)的2倍這個(gè)規(guī)律罪治,可以通過(guò)cat /proc/cpuinfo查看相關(guān)cpu信息。
3. make -j8
錯(cuò)誤錦集
recipe for target 'ninja_wrapper' failed
這種錯(cuò)誤基本都是jack-server
的內(nèi)存太小導(dǎo)致礁蔗,修改如下文件
prebuilts/sdk/tools/jack-admin
找到JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation"
在最后添加 -Xmx4096
即:JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096
重啟jack-server
:
prebuilts/sdk/tools/jack-admin kill-server
prebuilts/sdk/tools/jack-admin start-server
除了這個(gè)錯(cuò)基本就是依賴包沒(méi)有安裝觉义,安裝依賴包即可。
參考
https://blog.csdn.net/hunter___/article/details/80972878
https://blog.csdn.net/ltstud/article/details/79712054
https://blog.csdn.net/ronnyjiang/article/details/55812305
https://blog.csdn.net/Yoryky/article/details/81813717