1. 程式人生 > >android8.0編譯記錄

android8.0編譯記錄

Android8.0的正式版在8月21日正式釋出,我打算親自動手編一個可以跑在nexus 6p上的rom測試一下,下面是編譯過程中的一些記錄

一、下載前準備

1,我使用自己的mac進行編譯,限於儲存容量,另外準備了一個行動硬碟。首先要將行動硬碟格式化為區分大小寫的,可以使用ma自帶的磁碟工具來完成。

2,安裝好jdk,最好使用最新的jdk版本來編譯Android8.0,一開始沒有使用最新的jdk,編譯到40%左右的時候遇到了編譯錯誤,重新升級jdk才解決。

3,確保電腦上make、git都已經正確安裝

4,安裝xz,原始碼編譯到後面好像需要解壓縮之類的,可以使用brew進行安裝,命令是 brew install xz,非常簡單。如果沒有安裝brew,可以參照我文章後面介紹的進行安裝。

二、原始碼下載

1,由於谷歌被牆,所以我採用清華映象來進行原始碼下載。清華映象關於Android原始碼的網址為https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

2,下載repo工具。repo是一個Python寫的指令碼,它建立在git上。通過下面幾行命令進行repo的設定和下載

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
上面網址有問題的話可以使用下面的來替換
https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
3,修改repo指令碼

開啟~/bin/repo檔案,將

REPO_URL = 'https://gerrit.googlesource.com/git-repo'

替換成

REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

4,開始下載

為了加快程式碼下載速度,我首先下載了清華映象中的初始化包,網址為 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar。

下載完成後進行解壓,會出現一個aosp目錄,進入到這個目錄中繼續進行程式碼的下載。

通過下面的命令可以下載程式碼的master分支程式碼

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
如果需要某個特定的 Android 版本(列表),可以通過-b來選擇分支
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1
接著開始進行程式碼的同步,使用下面的命令列
repo sync
如果沒有問題的話,repo sync執行完畢後就會下載一份完整的程式碼。當然了,大多數情況下可能不會一次就成功,文章最後是我下載和編譯過程中遇到的一些問題以及解決方案。

三、原始碼編譯

1,進入到aosp目錄,執行下面的命令

   source build/envsetup.sh #初始化編譯環境
   lunch  #選擇編譯目標,我選擇的是Nexus6p所對應的angler,即aosp_angler-userdebug
   make # 或者 make -j8
2,接下來就是漫長的等待,如果出現了問題就針對性解決,我編了四五次終於成功了,附一張截圖


四、下面是Android8.0原始碼編譯過程中出現的錯誤

1,我使用的清華映象進行程式碼下載,在下載程式碼時出現了Exited sync due to fetch errors,原因應該是下載的負載過重,所以把下載的執行緒數減少就可以了,使用repo sync -f -j4解決了這個問題

2,Jack server failed to (re)start, see Jack server log Unsupported curl, please use a curl not based on SecureTransport Unsupported curl, please use a curl not based on SecureTransport ninja: build stopped: subcommand failed. make: *** [ninja.intermediate] Error 1這個錯誤說明使用的curl是基於SecureTransport的,需要重新安裝一個其它的。在安裝curl時可以使用brew進行安裝,由於我電腦上沒安裝brew,所以我首先對brew進行了安裝。brew類似於ubuntu上的apt-get,它的安裝可以通過一行命令來完成:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew安裝完成後,通過下面兩行命令完成新的curl的安裝和環境變數配置

brew install curl--with-opensslexport 
PATH=$(brew--prefix curl)/bin:$PATH

3,build/core/base_rules.mk:238: error: external/googletest/googletest: MODULE.TARGET.STATIC_LIBRARIES.libgtest already defined by external/googletest/googletest. 16:57:43 ckati failed with: exit status 1在編譯過程中多次遇到這個問題,問題說的是某些東西重定義了,後來多方查詢,原來是我在mac的環境變數中設定過NDK_ROOT和SDK_ROOT,也就是NDK和SDK的路徑,然後後面編譯Android原始碼時會與它們產生衝突,所以暫時把設定過的NDK和SDK環境變數取消掉,就可以解決這個問題了。

4,Out of memory error (version 1.3-rc6 'Douarn' (441800 22a11d4b264ae70e366aed3025ef47362d1522bb by [email protected])).GC overhead limit exceeded.

(1)首先停止jack server的執行;

(2)去prebuilts/sdk/tools目錄下執行 jack-admin kill-server以殺死Jack server;

(3)然後開啟jack-admin檔案,在檔案中搜索JACK_SERVER_COMMAND,然後將JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME",改為JACK_SERVER_COMMAND="java -Xmx3g -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"。

也就是添加了-Xmx3g選項

5,編譯過程中出現了一次java編譯器報錯,我使用的jdk版本是1.8.0_24,然後升級成了1.8.0_144,問題解決

6,Jack server failed to (re)start, try 'jack-diagnose' or see Jack server log

使用jack-admin kill-server命令殺死後重新make就好了。

相關推薦

android8.0編譯記錄

Android8.0的正式版在8月21日正式釋出,我打算親自動手編一個可以跑在nexus 6p上的rom測試一下,下面是編譯過程中的一些記錄一、下載前準備1,我使用自己的mac進行編譯,限於儲存容量,另外準備了一個行動硬碟。首先要將行動硬碟格式化為區分大小寫的,可以使用ma

在Ubuntu16.04上搭建Android8.0編譯環境

1. 安裝AOSP編譯工具sudo apt install git-core sudo apt install gnupg sudo apt install flexsudo apt install bisonsudo apt install gperfsudo apt in

Mac Android8.0原始碼編譯筆記

原因:記憶體不夠辦法:新增限制,輸入如下命令:export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"./prebuilts/sdk/tools/jack-admin kill-server./p

Android8.0 系統原始碼編譯

環境 編譯環境:Ubuntu18.04 硬體環境:ThinkPad 編譯準備 安裝jdk sudo apt-get update sudo apt-get install openjdk-8-jdk sudo apt-get

【學習筆記68】Android8.0 模擬器使用及映象編譯

1.aosp-arm-eng 對應的device目錄為 device/generic/car/common/product/,入口編譯指令碼為aosp_arm.mk。 2.現在android8.0的模擬器已經不支援通過開啟除錯選項進入root模式。查閱google資料,是必須燒寫eng版本的映象才可以獲取r

如何在本機編譯android8.0環境,適用於Ubuntu16.04

1.安裝openjdk sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get install openjdk-8-jdk 2.安裝vim編輯器 sudo apt-get inst

Android8.0原始碼編譯填坑之路

環境:Mac10.13.4問題一:system/core/base/logging.cpp:81:10: 'syscall' is deprecated: first deprecated in OS X 10.12 - syscall(2) is unsupported; 

ANDROID 編譯原始碼6.0 問題記錄

1、Ubuntu 系統Ubuntu 14.04 LTS, 2、android原始碼來自於清華TUNA映象源     http://aosp.tuna.tsinghua.edu.cn/android/ 3、下載完android原始碼後,進行原始碼編譯。根目錄make 4、ma

Centos 7.0 編譯安裝LAMP(Linxu+apache+mysql+php)之源碼安裝Apache (一)

mysql apache mysql編譯安裝 apache編譯安裝 lamp編譯安裝 Apache 簡介: Apache是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上,由於其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠

Centos 7.0 編譯安裝LAMP(Linxu+apache+mysql+php)之源碼安裝Mysql (二)

php mysql apache mysql 簡介: MySQL是一個關系型數據庫管理系統,關系數據庫將數據保存在不同的表中,這樣就增加了速度並提高了靈活性。目前其屬於 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RD

Centos 7.0 編譯安裝LAMP(Linxu+apache+mysql+php)之源碼安裝php (三)

lamp apache 源碼編譯lamp php mysql centos 7 編譯安裝lamp PHP簡介: PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特

Centos 7 nginx-1.12.0編譯安裝

不知道 kill further .org yum rewrite err ice sof 參考:http://www.nginx.cn/install 也不知道我的系統是否有這些依賴包,試試吧?缺少哪些我就裝哪些吧,多踏點坑總是能學到點東西的. 獲取nginx包 ht

centos7.0編譯安裝python3.6.2

python一、查看Linux系統版本信息[[email protected]/* */ ~]# cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) [[email protected]/* */ ~]# uname

mongodb c++ driver 2.0編譯使用

頭文件 dem set program 指令 driver -- cts b- 安裝boost1.48.0 在boost的官網下載boost1.48.0,鏈接例如以下: http://sourceforge.net/projects/boost/files/bo

WebDriverAgent編譯記錄

webdriveragent.bundlesodu mkdir -p Resources/WebDriverAgent.bundle-bash: sodu: command not foundbogon:WebDriverAgent zhouhaijun$ sudo mkdir -p Resources/We

Android音視頻通話過程中最小化成懸浮框的實現(類似Android8.0畫中畫效果)

apk 添加 touch null cas 如果 動態添加 int sta 關於音視頻通話過程中最小化成懸浮框這個功能的實現,網絡上類似的文章很多,但是好像還沒看到解釋的較為清晰的,這裏因為項目需要實現了這樣的一個功能,今天我把它記錄下來,一方面為了以後用到便於自己查閱,一

Android8.0適配之一應用圖標適配

weixin ref 就會 gpo asset mage studio 我們 編輯器 1、適配條件 target在26以下,不用做適配。 如果設置target=26及以上,在8.0不做適配,就會顯示成一個圓圈包圍著logo,不好看。 2、Android 8.0應用圖標適配

Cenots 7.0編譯安裝libiconv-1.14時的故障

php libiconv 本人使用的是Cenos 7.0系統,因PHP需要 在編譯安裝libiconv-1.14時遇到如下問題: 故障1、 未安裝GCC cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv configure: error

rocketMQ_4.1.0 編譯好可以直接運行的版本:

rocketMQ如果從gitub上下載源碼需要maven編譯比較麻煩,這裏有現成的可以直接運行的:rocketMQ_4.1.0 編譯好可以直接運行的版本:鏈接:https://pan.baidu.com/s/11MT5rUGd2LXcBzJj-Bs5Sg 密碼:u20jrocketMQ_4.1.0 編譯好可以

vue2.0實戰記錄

mage ins webp 初始化 cas 資源 記錄 image .json 1. 初始化項目vue init webpack caseone cd caseonecnpm installcnpm install less less-loader -Dcnpm insta