Ubuntu下編譯Android源碼

傳統(tǒng)方法

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

安裝依賴軟件

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

下載 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

這里最好將加入到環(huán)境變量中,這樣以后每次啟動都不用再設置PATH

  • vim ~/.bashrc在文件最后添加
export PATH=~/bin:$PATH

然后刷新

source ~/.bashrc
  • 如果是zsh的話,則編輯vim ~/.zshrc
    添加
export PATH=~/bin:$PATH

然后刷新

source ~/.zshrc

下載和同步源碼

參考 https://lug.ustc.edu.cn/wiki/mirrors/help/aosp#%E5%88%9D%E5%A7%8B%E5%90%8C%E6%AD%A5%E6%96%B9%E6%B3%951

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

編譯

執(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
make clobber
make -j12

所有的編譯目標的格式都是:BUILD-BUILDTYPEBUILD指的是指定特性的結合间涵,
BUILDTYPE是下面列出的其中一個:

Buildtype 用途
user 有限的權限;適合一般用戶
userdebug 類似user模式榜揖,但有root權限和debug能力勾哩,適合debug
eng 帶有額外的debug工具的開發(fā)配置。

運行

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

PS

編譯出錯

編譯出現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举哟∷祭停或者直接執(zhí)行。LC_ALL=C 是為了去除所有本地化的設置妨猩,讓命令能正確執(zhí)行敢艰。

make版本問題

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

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

如果出現錯誤提示glob/glob.c:xxx: undefined reference to __alloca'的錯誤册赛,
修改 /glob/glob.c為(即加兩行注釋)

//      #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

保存后編譯通過钠导。(這個錯誤是glibc2.7引起的)

隨筆

編譯的時候make 12線程就會有這樣的壯觀場面


采用docker自動編譯

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末侥加,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子粪躬,更是在濱河造成了極大的恐慌担败,老刑警劉巖昔穴,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異提前,居然都是意外死亡吗货,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門狈网,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宙搬,“玉大人,你說我怎么就攤上這事拓哺∮露猓” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵拓售,是天一觀的道長。 經常有香客問我镶奉,道長础淤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任哨苛,我火速辦了婚禮鸽凶,結果婚禮上,老公的妹妹穿的比我還像新娘建峭。我一直安慰自己玻侥,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布亿蒸。 她就那樣靜靜地躺著凑兰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪边锁。 梳的紋絲不亂的頭發(fā)上姑食,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音茅坛,去河邊找鬼音半。 笑死,一個胖子當著我的面吹牛贡蓖,可吹牛的內容都是我干的曹鸠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼斥铺,長吁一口氣:“原來是場噩夢啊……” “哼彻桃!你這毒婦竟也來了?” 一聲冷哼從身側響起晾蜘,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叛薯,失蹤者是張志新(化名)和其女友劉穎浑吟,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體耗溜,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡组力,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了抖拴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片燎字。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖阿宅,靈堂內的尸體忽然破棺而出候衍,到底是詐尸還是另有隱情,我是刑警寧澤洒放,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布蛉鹿,位于F島的核電站,受9級特大地震影響往湿,放射性物質發(fā)生泄漏妖异。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一领追、第九天 我趴在偏房一處隱蔽的房頂上張望他膳。 院中可真熱鬧,春花似錦绒窑、人聲如沸棕孙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蟀俊。三九已至,卻和暖如春订雾,著一層夾襖步出監(jiān)牢的瞬間欧漱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工葬燎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留误甚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓谱净,卻偏偏與公主長得像窑邦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子壕探,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容