Android 4.04 源碼編譯 (ubuntu 12.04)


原文:http://www.adaiw.com/?p=167

1 準備開發環境

下載sun-java6-jdk (NOT openjdk6)

REF: http://source.android.com/source/initializing.html

注意安裝包,並連接libGL:

$ 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 openjdk-6-jdk tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

Ubuntu下無法安裝sun-java6-jdk的解決辦法

如果其它apt-get下載提示找不到包,就更新:source.list

如果apt-get 遇到407  Proxy Authentication Required ,那麼修改 /etc/apt/apt.conf

?View Code CONF
1
2
3
4
Acquire::http::proxy "http:///username:passwd@proxy:port/";
Acquire::https::proxy "https:///username:passwd@proxy:port/";
Acquire::ftp::proxy "ftp:///username:passwd@proxy:port/";
Acquire::socks::proxy "socks://username:passwd@proxy:port/";

2.下載最新源碼 

http://source.android.com/source/downloading.html

準備好13G以上的硬盤空間。

3 新建REPO/GIT branch

有了代碼的第一需求,就是建一個GIT,REPO已經提供了這樣的命令,幫助新建一個GIT分支:$repo start BRANCH PROJECT 這裏PROJECT指的是源碼根下面分的很多小項目,這些分例如:

?View Code SHELL
1
2
3
$repo start oozicLauncher packages/apps/Launcher2/
$cd  packages/apps/Launcher2/
$git status

這下可以安心的修改源碼了。呵呵呵呵

REF: http://source.android.com/source/version-control.html

4 編譯源碼

開4個線程MAKE:(官方推薦線程數是CPU數目加2)

$make -j4

遇到問題:

ERROR: prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/bin/x86_64-linux-gcc only run on 64-bit linux
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/emulator64-target-arm_intermediates/tcg/tcg.o] Error 1
make: *** Waiting for unfinished jobs….
產生的原因是我的UBUNTU是32位的,要求64位。
牛人給了一個解決方法 : external/qemu/Makefile.common  externalqemu/Makefile.target 中關於-m64改爲-m32
繼續編譯,緊接又遇到一個問題:android “error: gnu/stubs-64.h: no such file or directory 產生原因仍然是要64位系統
繼續編譯, 這次/out/target/product又編不過去了。
好吧,按官方的來,重裝一個64位系統。
選擇12.04LTS,下載ISO後,用pendrive生成USB安裝盤。
開機選USB啓動。
安裝好後,GOTO STEP 1
5 在Ubuntu12.04下編譯的問題:
make: *** [out/host/linux-x86/obj/  EXECUTABLES/emulator64- 
arm_intermediates/emulator64-arm] error 1
原因是Ubuntu12.04裝的是GCC4.6,編譯ICS要用GCC4.4. Ubuntu11.10也有同樣的問題。這樣解決:
?View Code SHELL
1
2
3
$ sudo apt-get install gcc-4.4 g++-4.4
$lunch
$make CC=gcc-4.4 CXX=g++-4.4
經過中間機子卡死,按Ctrl+C停止,並重編後,終於完成編譯。
用$emulator 看到熟悉的界面
參考
6 編譯SDK
$make PRODUCT-sdk-sdk
7. 使用編譯好的SDK
unzip out/host/linux-86/sdk/android-sdk_eng.herbertdai_linux-x86.zip
在Eclipse用使用這個新SDK。
遇到一個問題:顯示SDK版本爲Preview,並提示錯誤:
需要在AndroidManifest.xml  添加 minSdkVersion=”AOSP”。
然後也不能跑在設備上,設備的版本是4.0.3,version 15, 提示與AOSP不兼容。
這位高人給出解答:http://www.qkevin.com/archives/257
原來下載最新的源碼都默認
PLATFORM_VERSION_CODENAME := AOSP 相當於一個當前正在開發的版本,即Preview版,不是正式版。
按他的方法, 我把 build/core/version_defaults.mk 中的PLATFORM_VERSION_CODENAME改爲:
If this is a final release build, it is simply “REL”.
PLATFORM_VERSION_CODENAME := REL
再運行:
$make CC=gcc-4.4 CXX=g++-4.4
$make PRODUCT-sdk-sdk
成功。
這次的SDK顯示版本爲15, 而非“AOSP”。現在程序就可以正常跑在設備上了。
PS 如果要修改源碼中字段的@hide屬性,需要運行:
$make update-api
GOOGLE這樣做,一是爲了封閉其內部的一些屬性和方法,防止外部程序亂用,二是隱藏一些正在開發中的組件,等成熟後再去掉@hide屬性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章