Ubuntu12.04下編譯和下載Android4.0.3源碼
[Android]Ubuntu12.04 下編譯和下載 Android4.0.3 源碼
原創文章,謝絕轉載
官方頁麵 :
initialize -> https://source.android.com/source/initializing.html
download -> https://source.android.com/source/downloading.html
build -> https://source.android.com/source/building.html
1 安裝 JDK1.6.0
下載地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-
513648.html
1.1 將下載到的 jdk-6u29-linux-i586.bin 移動到/usr/lib/jvm/java 目錄下,若不存在 jvm 和 java 目錄,請使
用 root 身份創建。
命令為:
sudo -s(之後,輸入登錄 ubuntu 的密碼)
cd /usr/lib
mkdir jvm
cd jvm
mkdir java
創建完 jvm 和 java 目錄之後,使用 mv 命令將 jdk-6u29-linux-i586.bin 拷貝到 java 目錄下。
1.2 安裝 JDK
切換至/usr/lib/jvm/java 目錄下,執行下麵的命令:
chmod +x jdk-6u29-linux-i586.bin(增加可執行權限)
./jdk-6u29-linux-i586.bin
安裝的時候,需要的時候按下 enter 就 Ok 了。
1.3 配置 JDK
gedit /etc/environment
在打開的文件中,添加如下幾行:
PATH=$PATH:$JAVA_HOME/bin($PATH 為之前的 PATH 環境變量的內容)
CLASSPATH=".:$JAVA_HOME/bin"
JAVA_HOME="/usr/lib/jvm/java/jdk1.6.0_29"
接下來,需要安裝 java/javac/jar 命令了,執行如下命令:
update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.6.0_29/bin/java 300
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/jdk1.6.0_29/bin/javac 300
update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java/jdk1.6.0_29/bin/jar 300
update-alternatives --config java
update-alternatives --config javac
update-alternatives --config jar
在執行後麵三條命令的時候,可能會出現選擇的提示,這時候一定要選擇 jdk1.6.0,而不是係統中的
openJDK,切忌。
最後,可以使用 java -version 命令,查看下當前的 java 版本是否為 1.6.0.
作者:南都布衣
2 安裝必要的編譯包
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-
dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-
dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386(與官方
的命令相比,我刪除了 openjdk 的安裝包)
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so(執行下,提示失
敗也沒關係)
3 安裝 repo
3.1 創建 bin 目錄,並設置路徑,執行命令如下:
mkdir ~/bin
PATH=~/bin:$PATH
3.2 安裝 repo,執行命令如下:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
4 下載 android4.0.3 源碼
4.1 創建你的 Google 登錄的用戶名和密碼
打開網址 https://android.googlesource.com/new-password,使用你的 Google 賬戶登錄進去,然後點擊
“Allow Access”按鈕,回出現一個頁麵,上麵有 Google 分配給你的用戶名和密碼。拷貝下方文本框內的
內容,在終端中執行命令:gedit ~/.netrc,之後,將拷貝的內容粘帖到.netrc 文件中。
4.2 初始化 repo
執行命令:repo init -u https://android.googlesource.com/a/platform/manifest
4.3 下載源碼
執行命令:repo sync
5 錯誤處理
5.1 錯誤 1
Fetching projects: 22% (51/228) fatal: Not a git repository:
'/home/android/.repo/projects/external/fdlibm.git'
出現如上的錯誤,使用 rm 命令直接刪除對應的文件,重新 repo sync 即可。
執行命令:rm -rf /home/android/.repo/projects/external/fdlibm.git
5.2 其他錯誤
將錯誤信息到 Google 上麵搜索下,就會有答案的。當然了,有時候需要使用翻牆軟件才行,因為可能會
訪問到 google group 和 blogspot 等網站,而這些網站被和諧了。
6 編譯 Android4.0.3
6.1 編譯前的準備工作
請確認以下包的版本是否 OK:
1. gcc4.4,而不是 gcc4.6,如果是 4.6,需要安裝 gcc4.4,命令如下:
作者:南都布衣
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
cd /usr/bin
ls -l gcc*
sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc
ls -l g++*
sudo mv g++ g++.bak
sudo ln -s g++-4.4 g++
gcc -v
g++ -v
2 python2.5-2.7,ubuntu12.04 版本,默認的 python 版本是 2.7,所以,這個沒什麼問題
3 java 版本微 1.6.0,而不是 openJDK,前麵我已經刪除了 openJDK 的安裝包,所以這裏應該沒有才對。
6.2 編譯源碼
按照官方的提示,依次執行如下命令:
source build/envsetup.sh
lunch full-eng
make -j4
建議:最後一條命令使用 make showcommands,這樣可以顯示編譯命令,使得編譯的時候,屏幕沒有輸
出的時候,不會感覺無聊。
7 編譯錯誤處理
7.1
錯誤:You are attempting to build with the incorrect version of java.
解決方法:sudo update-alternatives --config java,同時最好確認下 javac 和 jar 命令。
7.2
錯誤:make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] 錯誤 1
make: *** 正在等待未完成的任務....
解決方法:
修改源碼目錄下/build/core/combo/HOST_linux-x86.mk 文件:
將以下語句
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
修改為
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
7.3
錯誤:make: *** [out/host/linux-
x86/obj/STATIC_LIBRARIES/libMesa_intermediates/src/glsl/linker.o] 錯誤 1
解決方法:
gedit external/mesa3d/src/glsl/linker.cpp
在頭文件段中,添加#include <stddef.h>
7.4
錯誤:make: *** [out/host/linux-
x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o]
解決方法:確認你使用的 gcc 和 g++的 4.4 版本,而不是更高的版本。
7.5
錯誤:make: *** [out/target/common/obj/APPS/CtsVerifier_intermediates/classes-full-debug.jar]
解決方法:sudo update-alternatives --config javac,選擇 jdk1.6.0,而不是 openjdk。
7.6
錯 誤:make: *** [out/target/common/obj/APPS/android.core.tests.libcore.package.com.no-core-tests-
res_intermediates /noproguard.classes-with-local.dex] Killed
解決方法:此問題是因為編譯 android4.0 需要 4GB 的 RAM 或 SWAP 空間,而 ubuntu 默認的 1GB 的,
所以,增加 swap 空間即可,執行命令如下:
sudo dd if=/dev/zero of=/boot/swapfile bs=1024 count=4194304
sudo mkswap -v1 /boot/swapfile
sudo swapon /boot/swapfile
free
sudo vi /etc/fstab
/boot/swapfile swap swap defaults 1 1
7.7 其他錯誤,請 Google 下,還是那句話,你很可能需要翻牆。
8 編譯成功
8.1 編譯成功之後,會在 out/target/product/generic 下麵看到 system.img,ramdisk.img,userdata.img
8.2 但是我編譯成功之後,在終端運行 emulator 命令,卻提示:
No command 'emulator' found, did you mean:
Command 'qemulator' from package 'qemulator' (universe)
emulator: command not found
解決方法:
重新運行以下命令:
source build/envsetup.sh
lunch full-eng
最後更新:2017-04-03 14:53:52