Ubuntu18.04下編譯Android源碼筆記

一. 最新的方法-采用docker自動編譯

linux至少要分配100g的硬盤空間边臼。

1.1 安裝docker

默認源中沒有docker,我們需要在添加backports源择膝,在/etc/apt/sources.list文件 加入下面這行

deb http://http.debian.net/debian jessie-backports main

運行如下命令安裝docker

apt-get update
apt-get install docker.io

1.2 開始編譯

  1. 開始之前先啟動docker服務(wù),不然到后面會報錯
/etc/init.d/docker start
  1. 設(shè)置AOSP_VOL環(huán)境變量,設(shè)置為你要存放源碼的路徑,給VMWare添加硬盤擴容的設(shè)置成掛載的硬盤的路徑怜浅。(注意這個export會在重新打開一個shell以后失效)
export AOSP_VOL=/home/Android
  1. 下載Wrapper腳本,我這里演示編譯kitkat(Android 4.4),編譯其他版本可以參考, 腳本對國內(nèi)環(huán)境做了優(yōu)化,使用速度比較快的清華源
curl -O https://raw.githubusercontent.com/tiann/docker-aosp/master/tests/build-kitkat.sh
  1. 編譯源碼,直接運行上一步下載下來的源碼。該腳本會下載docker鏡像耻蛇,并且下載Android源碼到AOSP_VOL指定的路徑,然后編譯胞此。(注意要使用root權(quán)限臣咖,否則將無法正常使用docker)
sudo bash ./build-kitkat.sh

編譯完成后,使用的是系統(tǒng)默認自帶的內(nèi)核

二. 傳統(tǒng)方法

2.1 JDK安裝和版本切換

  • 安裝Oracle JDK (此處編譯Android4.4的源碼,使用JDK6版本)
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
  • 也可以安裝OpenJDK(安卓官方使用)(推薦)
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
  • JDK版本切換
sudo update-alternatives --config java
sudo update-alternatives --config javac

2.2 安裝依賴軟件

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential  
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
sudo apt-get install libc6-dev-i386 
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache bison

2.3 下載 repo 工具

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可訪問漱牵,可以用下面的:
## curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo

設(shè)置環(huán)境變量

  • 如果是默認的bash夺蛇,則編輯vim ~/.bashrc文件
export PATH=~/bin:$PATH
source ~/.bashrc
  • 如果是zsh的話,則編輯vim ~/.zshrc文件
export PATH=~/bin:$PATH
source ~/.zshrc

2.4 下載和同步源碼

參考

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-7.1.1_r1
repo sync --force-sync --force-broken

注意:如果提示無法連接到 gerrit.googlesource.com酣胀,可以編輯 ~/bin/repo刁赦,把 REPO_URL 一行替換成下面的

REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'

同步也可以使用如下命令

repo sync

2.5 編譯

執(zhí)行

export USE_CCACHE=1
export CCACHE_DIR=ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G

準備編譯環(huán)境

source build/envsetup.sh

用lunch命令選擇編譯目標

lunch aosp_angler-userdebug   //lunch aosp_arm64-eng

注意:所有的編譯目標的格式都是:BUILD-BUILDTYPEBUILD指的是指定特性的結(jié)合闻镶,BUILDTYPE是下面列出的其中一個:

BUILDTYPE 用途
userdebug 類似user模式甚脉,但有root權(quán)限和debug能力,適合debug
eng 帶有額外的debug工具的開發(fā)配置铆农。
user 有限的權(quán)限牺氨;適合一般用戶

然后

make clobber
make -j12

2.6 運行

export ANDROID_PRODUCT_OUT=out/target/product/generic
export ANDROID_BIN=out/host/linux-x86/bin
PATH=$ANDROID_BIN:$PATH

source build/envsetup.sh
lunch aosp_arm-eng
emulator64-arm -gpu off -memory 2048

2.7 錯誤處理

2.7.1 編譯出錯

編譯出現(xiàn)如下錯誤提示時

flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertioncnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed. Aborted (core dumped)

可以將export LC_ALL=C添加到~/.bashrc文件。LC_ALL=C 是為了去除所有本地化的設(shè)置顿涣,讓命令能正確執(zhí)行波闹。

2.7.2 make版本問題

編譯Android源碼需要make的版本為3.8.1或者3.8.2(在Ubuntu18上的make版本太新了)需要降版本

./configure --prefix=/usr
make 
sudo make install

如果出現(xiàn)錯誤提示glob/glob.c:xxx: undefined reference to __alloca'的錯誤精堕,
修改 /glob/glob.c為(即加兩行注釋),保存后編譯通過。(這個錯誤是glibc2.7引起的)

//      #if  !defined  __alloca  &&  !defined  __GNU_LIBRARY__
#  ifdef        __GNUC__
#    undef  alloca
#    define  alloca(n)        __builtin_alloca  (n)
#  else        /*  Not  GCC.    */
#    ifdef  HAVE_ALLOCA_H
#      include  <alloca.h>
#    else        /*  Not  HAVE_ALLOCA_H.    */
#      ifndef  _AIX
#        ifdef  WINDOWS32
#          include  <malloc.h>
#        else
extern  char  *alloca  ();
#        endif  /*  WINDOWS32  */
#      endif  /*  Not  _AIX.    */
#    endif  /*  sparc  or  HAVE_ALLOCA_H.    */
#  endif        /*  GCC.    */
#  define  __alloca        alloca
//      #endif

最后

本文主要對原文進行了二次編輯與排版使得更便于閱讀與操作蒲障,這里感謝作者pcy190的原創(chuàng)


查看原文

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歹篓,一起剝皮案震驚了整個濱河市瘫证,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庄撮,老刑警劉巖背捌,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異洞斯,居然都是意外死亡毡庆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門烙如,熙熙樓的掌柜王于貴愁眉苦臉地迎上來么抗,“玉大人,你說我怎么就攤上這事亚铁∮叮” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵徘溢,是天一觀的道長吞琐。 經(jīng)常有香客問我,道長然爆,這世上最難降的妖魔是什么站粟? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮曾雕,結(jié)果婚禮上卒蘸,老公的妹妹穿的比我還像新娘。我一直安慰自己翻默,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布恰起。 她就那樣靜靜地躺著修械,像睡著了一般。 火紅的嫁衣襯著肌膚如雪检盼。 梳的紋絲不亂的頭發(fā)上肯污,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音吨枉,去河邊找鬼蹦渣。 笑死,一個胖子當著我的面吹牛貌亭,可吹牛的內(nèi)容都是我干的柬唯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼圃庭,長吁一口氣:“原來是場噩夢啊……” “哼锄奢!你這毒婦竟也來了失晴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤拘央,失蹤者是張志新(化名)和其女友劉穎涂屁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灰伟,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡拆又,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了栏账。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帖族。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖发笔,靈堂內(nèi)的尸體忽然破棺而出盟萨,到底是詐尸還是另有隱情,我是刑警寧澤了讨,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布捻激,位于F島的核電站,受9級特大地震影響前计,放射性物質(zhì)發(fā)生泄漏胞谭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一男杈、第九天 我趴在偏房一處隱蔽的房頂上張望丈屹。 院中可真熱鬧,春花似錦伶棒、人聲如沸旺垒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽先蒋。三九已至,卻和暖如春宛渐,著一層夾襖步出監(jiān)牢的瞬間竞漾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工窥翩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留业岁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓寇蚊,卻偏偏與公主長得像笔时,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子幔荒,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容