close



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

先到官網根據提示做點準備。

原始碼 2.1 G,加上編譯後的文件需要6G左右的空間。

CPU內存越快越多越好。

如果在虛擬機裏要求會更高些,CPU頻率少于2G,內存少于2G的到後面估計會比較痛苦。

官網上只給了ubuntu的原始碼下載、編譯方法。(前面的準備工作可以參考一下)

$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev

上面這些是要提前安裝的軟件包。

其中 sun-java5-jdk 要換最新的JDK6,其他的自己用 yum 檢查吧。

Fedora 的 yum 裏有些東西沒有,還有一些名稱和 ubuntu 的不一樣,上面那些東西如果能找到對應的 Fedora 名稱提前安裝更好,找不到也不怕,後面痛苦點,make時跟據錯誤提示去找自己系統中還缺什麽。

官網上說要用JDK5,JDK6不支持。

JDK 5.0, update 12 or higher.Java 6 is not supported, because of incompatibilities with @Override.

不理它,應該是說Android2.1,我在8月初下載的2.2版源代碼編譯時要用JDK6才行。

但實際上用JDK6編譯時被強制要求用64位系統,用32位系統的解決方法在後面。

Python 2.4, which you can download from python.org.
JDK 5.0, update 12 or higher, which you can download from java.sun.com. Java 6 is not supported, because of incompatibilities with @Override.
Git 1.5.4 or newer. You can find it at http://git.or.cz/.
這是官網對 ubuntu 以外的 linux 發行版的要求,除了JDK5之外其他兩項都要滿足。
Python一般裝好系統後都有,沒有的話, yum 獲取也比較方便。Git 要去上面的地址下載。

可以下載RPM包安裝,我下載的是原始碼編譯安裝的。

make時記得也有一些錯誤,根據提示把缺少的東西 yum 補上就行。

再接下來就是按照官網安裝配置repo獲取當前最新版本的Android源碼。根據網速,慢慢等吧。

下好原始碼就可以make了,下面是我make時遇到的錯誤和解決方法,也算是走過的彎路,這些軟件包如果提前都安裝好了基本上可以一次make搞定。

make時用 Fedora 做的簡單記錄,懶得再整理了。

1.
/bin/bash: bison: command not found
解決:yum install bison*

2.
/bin /bash: g++: command not found
解決:yum install gcc-c++


3.
external/qemu/Makefile.android:1101: 警告:覆蓋關于目標“external/qemu/android/avd/hw-config-defs.h”的命令
external/qemu/Makefile.android:933: 警告:忽略關于目標“external/qemu/android/avd/hw-config-defs.h”的舊命令
兩個警告,估計可以忽略

4.
一大堆關于java的警告錯誤,難道真的要把JDK降到5.0? (其實可以不用降級,用JDK6編譯的方法在最下邊)
解決:
先卸載原來的6.0:yum -e jdk-1.6.0_21-fcs.i586
進入JDK5的下載目錄運行:
./jdk-1_5_0_22-linux-i586-rpm.bin
安裝完後設置環境變量,要在/etc/profile中設置,.bashrc裏設置的不起作用。注銷重新登錄。

重新make,警告一大堆,不過看似還可以繼續進行下去...

5.
/bin/bash: flex: command not found
解決:yum -y install flex

6.
/usr/bin/ld: cannot find -lncurses
解決:yum install ncurses-devel

7.
prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55:22: 錯誤:X11/Xlib.h:沒有那個文件或目錄
prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:56:23: 錯誤:X11/Xatom.h:沒有那個文件或目錄
In file included from external/qemu/android/main.c:30:
prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:73: 錯誤:expected specifier-qualifier-list before ‘XEvent’
prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:86: 錯誤:expected specifier-qualifier-list before ‘Display’
external/qemu/android/main.c: 在函數‘main’中:
external/qemu/android/main.c:1281: 警告:隱式聲明函數‘audio_check_backend_name’
make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/mai

解決:yum install libX11-devel.i686
順便再根據http://scfofo.javaeye.com/blog/696676 的提示再安裝gperf(yum install gperf)

8.
/usr/bin/ld: cannot find -lhistory
看來fedora中缺的東西不算少
解決:yum install readline-devel
這次make了兩個多小時,中間時不時的從網頁切換的控制台看看怎麽還不出錯,最後竟然make完成了...


啓動模擬器查看編譯好的Android:

先設置環境變量,在/etc/profile中加入:
export ANDROID_PRODUCT_OUT=/home/xx/work/mydroid/out/target/product/generic
注銷重新登錄
打開終端,切換到root,進入out/host/linux-x86/bin
運行./emulator
關于emulator參數可參考 http://book.51cto.com/art/200912/173721.htm


重新make

上次make是在root下,向eclipse裏面導入原始碼,還有運行模擬器時也都要root權限。
刪了out文件夾重新make。

這次make中,重新認識了編譯Android2.2原始碼對java版本的要求。

官網中的說明是針對android2.1的,編譯android2.2需要jdk1.6而不是1.5。
但它只檢查一次,下次make只要不clean就不會再檢查,這也是上回可以用jdk1.5編譯完整的原因。
但用jdk1.6編譯要求OS是64位的,是在extemal下clearsilver模塊中的 Android.mk中做了強制限定。
這個模塊看起來是開發網頁模板的,具體可以看其文件夾下的README文件。
但爲什麽用JDK1.6就一定要用64 位版本編譯就不清楚了。

解決方法:
1)
先設定系統預設JDK爲1.6,make到external/clearsilver/java-jni/文件夾下會出錯退出,
這時換JDK1.5(換好後需要注銷重新登錄),再次直接make,不要make clean。
2)
如果一定要用JDK1.6則需要改幾個Android.mk文件。
參考:http://androidforums.com/android-developers/115959-ubuntu-10-04-android-open-source-make-error.html

把external/clearsilver/cgi/Android.mk, external/clearsilver/java-jni/Android.mk, external/clearsilver/util/Android.mk, external/clearsilver/cs/Android.mk.

下面腳本中的ifneq改爲ifeq可暫時規避問題
# This forces a 64-bit build for Java6
ifneq ($(filter 1.6%,$(java_version)),)
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
endif


REF:http://hi.baidu.com/keepfaraway



--------------------------------------------------


(一)Android 原始碼的編譯
編譯很簡單,直接在Android目錄下 make ,等上5,6小時就可以了。
不過Android的編譯系統要求java,javac的版本是1.5的。
在build/core/main.mk裏,會對java,javac的版本進行檢測。
如果版本不對,則會出現問題:

Checking build tools versions...
************************************************************
You are attempting to build with the incorrect version of java.
Your version is: java version "1.6.0_0".
The correct version is: 1.5.
Please follow the machine setup instructions at http://source.android.com/download


解決方法:
1)
編輯 build/core/main.mk

修改
java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')

java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')

缺點為編譯SDK的時候還是會出現問題 。
make sdk
Docs droiddoc: out/target/common/docs/services
javadoc: 錯誤 - 在 doclet 類 DroidDoc 中,方法 start 已抛出異常 java.lang.reflect.InvocationTargetException
com.sun.tools.javac.code.Symbol$CompletionFailure: 未找到 sun.util.resources.OpenListResourceBundle 的類文件

2)
安裝1.5版本的JDK
$ sudo apt-get install sun-java5-jdk flex
$ sudo update-java-alternatives -s java-1.5.0-sun


(二)SDK的編譯
在編譯完源碼後,再執行 make sdk
在out/host/linux-x86/sdk下面有
android-sdk_eng.lawrencekang_linux-x86 android-sdk_eng.lawrencekang_linux-x86.zip sdk_deps.mk


模擬器的運行
現設置好環境變量
export PATH=$PATH:/media/H/android/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/media/H/android/out/target/product/generic
export ANDROID_SWT=/media/H/android/out/host/linux-x86/
然後執行 emulator
用法有:
1.用預設的virtual device 運行模擬器
emulator
2.用某個皮膚來運行
emulaor -skin QVGA-L
emulator -skin WVGA800 則用WVGA800的皮膚來運行模擬器
但顯示 :
emulator: emulator window was out of view and was recentred
我們可以通過-scale ­­選項來解決這個問題,針對我們這個WVGA skin,用./emulator -skin WVGA -scale 0.9來啓動模擬器就沒問題了
3.直接指定大小
emulator -skin 800x480

不過google的網站http://developer.android.com/上有這樣一段話 :
The Android SDK includes several Emulator skins that you can use to control the resolution and density of the emulated device's screen. To select a specific skin for running the emulator, create an AVD that uses that skin. Please do not use deprecated emulator options such as -skin to control the skin used by an emulator instance. For more information about AVDs, see Android Virtual Devices.
意思是最好不要用-skin來運行模擬器,而要用-avd
創建avd用的工具是android
android
出現問題:
Error: Error parsing the sdk.
Error: /media/H/androidcupcake/out/host/linux-x86/platforms is missing.
Error: Unable to parse SDK content.

但在out/host/linux-x86/sdk/android-sdk_eng.lawrencekang_linux-x86/tools目錄下 ./android 則可以
原來在out/host/linux-x86/sdk/android-sdk_eng.lawrencekang_linux-x86/下面有platforms目錄,可見android會查找
上一級目錄下的platforms目錄
將platforms 和add-ons copy到 out/host/linux-x86下面
然後運行 android就可以了
創建的avd放在 ~/.android/avd下面
假如創建了一個foo ,則emulator -avd foo

模擬器跑起來後 ,還可以用adb shell 來執行 終端命令。

REF://http://blog.csdn.net/zhq56030207/archive/2010/09/19/5895033.aspx

arrow
arrow
    全站熱搜

    BB 發表在 痞客邦 留言(0) 人氣()