Ubuntu16.04編譯Android6.0/cm13.0教程及相關錯誤解決辦法

來源:互聯網
上載者:User

標籤:

一、必備工作

1、安裝依賴庫

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

2、安裝openjdk 7

ubuntu 14.04直接:

sudo apt-get install openjdk-7-jdk

Ubuntu 16.04沒有OpenJDK7的源,因此在16.04上安裝OpenJDK7需要執行下面的命令:

sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get updatesudo apt-get install openjdk-7-jdk 

配置OpenJDK.開啟/etc/profile檔案:

sudo gedit /etc/profile

在末尾追加下面代碼:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH

修改了/etc/profile檔案需要重啟才會生效,但使用下面命令可以在不重啟的情況下在當前bash環境生效:

source /etc/profile

檢查OpenJDK配置是否正確:

java -version

3、修改源碼

修改 mydroid/art/build/Android.common_build.mk 檔案,定位到75行,將下面的代碼:

ifneq ($(WITHOUT_HOST_CLANG),true)

改為:

ifeq ($(WITHOUT_HOST_CLANG),false)

如果不修改這裡,會遇到一個比較棘手的編譯錯誤,修改的目的是把CLANG這個編譯選項關掉,詳見後面的編譯記錄,百度搜狗都無解,這個錯誤只會在Ubuntu16.04上遇到,Ubuntu14.04則不存在這個問題,解決這個編譯錯誤花費一天時間,還好咱英語好,在歪果人的論壇上看了幾篇文章,終於搞定了。這裡順便說一下小技巧: 
遇到編譯錯誤,請把error後面的錯誤資訊全部複製,然後用搜狗搜英文網頁,不要用百度那個渣渣

二、開始編譯

1、在 .bashrc檔案末尾添加:export USE_CCACHE = 1

echo export USE_CCACHE=1 >> ~/.bashrc

2、為了提高編譯效率,設定編譯器快取:

prebuilts/misc/linux-x86/ccache/ccache -M 50G

3、接著匯入編譯Android源碼所需的環境變數和其它參數:

source build/envsetup.sh

4、 運行lunch命令選擇編譯目標

5、開始編譯,執行make -j8, 8為同時編譯的線程數,一般google推薦這個數字為2倍的cpu個數再加上2,比如4核,就是10。博主使用的是8:

make -j8#或者brunch cm_codename-userdebug

關於cpu個數,可以用下面命令查看:

cat  /proc/cpuinfo

好了,開始編譯了,接下來就是不斷error,不斷修複,繼續編譯的過程,下面記錄常見錯誤

三、錯誤記錄與解決辦法

1、編譯大坑,依賴庫問題

仔細看錯誤:

clang: error: linker command failed with exit code

其實這個是系統使用clang編輯器報的錯,百度了一下,解決方案一般是將art/build/Android.common_build.mk檔案ifneq ($(WITHOUT_HOST_CLANG),true)改為ifeq ($(WITHOUT_HOST_CLANG),false) 

然而紙上得來終覺淺,絕知此事要躬行,因為,這並沒有什麼卵用,至少現在沒有卵用。

抱著反正無聊試一試的想法,把上面這篇文章中的依賴一通複製:

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

然後make clean,重新再來。呵呵,這個錯誤是終於編過去了。

2、CLANG錯誤,編譯報錯recipe for target ‘out/host/linux-x86/obj/lib/libart.so‘ failed 

解決這個錯誤,又花費一番力氣,哈哈,這個時候找到解決方案了,再修改art/build/Android.common_build.mk檔案,將

ifneq ($(WITHOUT_HOST_CLANG),true)

改為:

ifeq ($(WITHOUT_HOST_CLANG),false)

重新編譯,解決問題。

3、中文路徑,坑。 

解決辦法:將中文路徑改為英文即可。

4、編譯報錯 ERROR:Cannot launch Jack Server   解決方案

如果遇到jack編譯錯誤,可以把$HOME/.jack中的設定檔中的SERVER=true設成false,不用jack,jack現在還不穩定。

 

Ubuntu16.04編譯Android6.0/cm13.0教程及相關錯誤解決辦法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.