1. 程式人生 > >Ubuntu 14.04編譯Android 2.3.7原始碼記錄

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

會啟動一個模擬器,並將編譯好的系統映象 載入安裝並執行到模擬器上。

這裡寫圖片描述

遇到的錯誤及解決辦法

  1. Can't locate Switch.pm

    原因:缺少相關庫
    解決:安裝缺失的庫

    sudo apt-get install libswitch-perl
    
  2. 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
    
  3. 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 ../
    
  4. out/target/common/obj/APPS/SignatureTest_intermediates/genres.stamp Killed

    原因:給虛擬機器設定的記憶體太小,僅1G。
    解決:將記憶體增大到4G 後解決。

  5. 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