Android源碼編譯總結

來源:互聯網
上載者:User

標籤:源碼   編譯   

這些天花了些時間自己下載了android源碼來編譯,其中走了一些彎路導致耗了些時間,現在重新梳理總結下,讓有相同想法的人自己編譯的時候能少走些彎路,官方指導文檔在http://source.android.com/source/initializing.html。

1、安裝linux環境

我是windows系統,安裝了Vmware虛擬機器,在虛擬機器上裝了ubuntu-12.04,我的這個版本是32位的,這個還蠻重要的,安裝32位或者64位的將決定你能編譯的android版本,官方文檔裡For Gingerbread (2.3.x) and newer versions, including the master branch, a 64-bit environment is required. Older versions can be compiled on 32-bit systems.

如果你編譯的是2.3以上的版本,就要安裝64位的ubuntu系統,否則裝32位版本即可,我這裡編譯的是2.3.5版本,因此選擇32位版本的Ubuntu 12.04.5 LTS。記憶體3g,硬碟40g(官網建議是30G以上)。


2、安裝jdk

很多網上的資料都講到http://www.oracle.com官網下載,然後我也去傻傻地下載了,下載了最新版本1.8以上了,結果後來啟動並執行時候發現andorid使用的是jdk1.6的,因此得安裝jdk1.6。

編譯的提示如下:

Your version is: java version "1.6.0_24". The correct version is: Java SE 1.6

在http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html

下載jdk-6u33-linux-i586.bin,然後把它移動到linux目錄下,我移動到/usr/lib下。

2.1分配許可權 chmod +x jdk-6u33-linux-i586.bin

2.2解壓 ./jdk-6u33-linux-i586.bin

一路確認下來,最後解壓出jdk1.6.0_33檔案夾

2.3配置 

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jdk1.6.0_33/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/libjdk1.6.0_33/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jdk1.6.0_33/bin/javaws" 1
sudo update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/jdk1.6.0_33/bin/jar" 1
sudo update-alternatives --config java

如果你的機器本來就裝有其他版本的java,這個時候會讓你選擇要生效的java版本,記住選擇當前這個1.6的版本

2.4 修改環境變數:

sudo gedit /etc/environment

export JAVA_HOME=/usr/lib/jdk1.6.0_33
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${JAVA_HOME}/bin:${JRE_HOME}/bin"

sudo gedit /etc/profile

export JAVA_HOME=/usr/lib/jdk1.6.0_33
export JRE_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${PATH}
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH


2.5.source /etc/profile

source /etc/environment


2.6.check java version

java -version

得到 

java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b04)
Java HotSpot(TM) Client VM (build 20.8-b03, mixed mode, sharing)


3、下載android 源碼

網上很多教程都是連網下載,但由於眾所周知的原因,這個方法可能被牆或者很慢,我在網上搜了個網址源碼下載 ,我下載了2.3.5的源碼Android2.3.5_Kernel.7z,解壓後得到.tar,繼續解壓後得到mydroid檔案夾,這個就是源碼代碼,將源碼同樣移動到/usr/lib下

進入源碼目錄,輸入make,就會有很多輸出。

其中我遇到的一個問題:

frameworks/base/libs/utils/RefBase.cpp: 在成員函數‘void android::RefBase::weakref_type::trackMe(bool, bool)’中:
frameworks/base/libs/utils/RefBase.cpp:483:67: 錯誤: 將‘const android::RefBase::weakref_impl’作為‘void android::RefBase::weakref_impl::trackMe(bool, bool)’的‘this’實參時丟棄了類型限定 [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] 錯誤 1


這個問題是因為本機裝的gcc版本太高,需要換到合適的可以編譯android的版本


sudo apt-get install gcc-4.4

sudo apt-get install g++-4.4

sudo rm -rf /usr/bin/gcc /usr/bin/g++

sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc

 sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++


第一次編譯會比較久,我是放一晚上讓它跑,第二天早上起來看到輸出

Target system fs image:    out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img  Install system fs image: out/target/product/generic/system.img  Target ram disk: out/target/product/generic/ramdisk.img  Target userdata fs image: out/target/product/generic/userdata.img   Installed file list: out/target/product/generic/installed-files.txt 代表成功make編譯了源碼,掌聲鼓勵下O(∩_∩)O哈哈~。

Android源碼編譯總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.