Ubuntu 14.04編譯Android 2.3.7原始碼記錄
編譯環境
下載原始碼
下載原始碼
Android 2.3.7r1 原始碼,原本按照谷歌官方的指導,需要下載repo同步AOSP,但是遇到太多問題,並且.repo 檔案相當大,下載耗時太久,而且很容易出現問題,而且所以直接下載別人打包好的7z格式高壓縮比原始碼包。
為什麼使用低版本的2.3.7
因為隨著Android版本的不斷更新,AOSP原始碼越來越龐大,需要佔據大量硬碟空間,同時對機器的效能提出了更高的要求,如果僅做學習研究的話,低版本的安卓就夠了。
安裝所需環境
安裝JDK 1.6
./jdk-6u45-linux-x64.bin
sudo cp -r jdk1.6.0_45 /usr/local
sudo gedit /etc/profile
新增以下內容
export JAVA_HOME=/usr/local/jdk1.6.0_45
export JRE_HOME=/usr/local/jdk1.6.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
登出系統,檢視jdk是否安裝成功
java -version
javac -version
安裝較低版本的gcc-4.4,g++-4.4
sudo apt-get install gcc-4.4
sudo apt-get install gcc-4.4-multilib
sudo apt-get install g++-4.4
sudo apt-get install g++-4.4-multilib
sudo rm -rf /usr/bin/gcc
sudo rm -rf /usr/bin/g++
sudo ln -s /usr/bin/gcc-4.4 gcc
sudo ln -s /usr/bin/g++-4.4 g++
檢視是否安裝成功
g++ -v
gcc -v
安裝所需的軟體包
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
開始編譯
執行命令
make clobber
source build/envsetup.sh
lunch generic-eng
make -j4
等待約50分鐘左右,編譯完成,中間可能遇到不少錯誤,基本上都可以google到解決方案。
執行
如果編譯順利,執行
emulator
會啟動一個模擬器,並將編譯好的系統映象 載入安裝並執行到模擬器上。
遇到的錯誤及解決辦法
Can't locate Switch.pm
原因:缺少相關庫
解決:安裝缺失的庫sudo apt-get install libswitch-perl
make:out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/native/dalvik_system_Zygote.o Error 1
原因:缺少標頭檔案。
解決:新增標頭檔案#include <sys/resource.h>
到以下檔案dalvik/vm/native/dalvik_system_Zygote.c
sudo gedit dalvik/vm/native/dalvik_system_Zygote.c
make:[out/host/linux-x86/obj/STATIC_LIBRARIES/libext4_utils_intermediates/output_file.o] Error 1
原因:系統的檔案換了位置。
解決: 此時需要將/usr/include/x86_64-linux-gnu/zconfig.h
拷貝到上級目錄,此時編譯才通過將zconfig.h
拷貝到/usr/include/
目錄即可cd /usr/include/x86_64-linux-gnu/ sudo cp zconfig.h ../
out/target/common/obj/APPS/SignatureTest_intermediates/genres.stamp Killed
原因:給虛擬機器設定的記憶體太小,僅1G。
解決:將記憶體增大到4G 後解決。SDL init failure, reason is: No available video device
原因:缺少SDL庫支援。
解決方法:新增庫。sudo apt-add-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner" sudo apt-get update sudo apt-get install libsdl1.2debian:i386