一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

編譯Android源代碼 - Android系統(tǒng)開發(fā) - DerekGuo

 jackywu_2005 2011-03-08




請按照“獲取Android源代碼”一節(jié)中的內(nèi)容安裝所需的相關(guān)包,否則在編譯源代碼的時(shí)候會報(bào)很多的錯(cuò)。為了方便起見,現(xiàn)將所有需要安裝的包羅列如下,其中有些包是可選的,但最好都裝上,同時(shí),在安裝之前,最好先更新一下:


$ sudo aptitude update

$ sudo aptitude upgrade


Ubuntu Linux 32x86


$ sudo aptitude install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev make gcc g++ libc6dev patch texinfo ncursesdev python2.6 valgrind lib32readline5-dev


$ sudo aptitude install sunjava6jdk


Ubuntu Linux 64x86


$ sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev make gcc g++ libc6-dev patch texinfo ncurses-dev python2.6 valgrind gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev


$ sudo ln -s /usr/lib32/libX11.so.6 /usr/lib32/libX11.so

$ sudo aptitude install sunjava6jdk


基本上安裝上面羅列的包,編譯時(shí)就不會有太大的問題,下面列舉本人(64位機(jī)子,Ubuntu10.04系統(tǒng))在編譯時(shí)出現(xiàn)的一些錯(cuò)誤,以及在出現(xiàn)錯(cuò)誤時(shí),相關(guān)的解決包。雖然google已將這些必需包在 android文檔中進(jìn)行說明了,但在此聲明這些問題的解決還是參考網(wǎng)址:http://code.google.com/p/android/issues/detail?id=1005


/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] Error 1


解決包:$ sudo aptitude install libc6-dev-i386


/usr/bin/ld: cannot find -lstdc++

collect2: ld returned 1 exit status

make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl] Error 1


dpkg-query -l &> packages.txt (該工具可用來查詢dpkg數(shù)據(jù)庫)

解決包:$ sudo aptitude install g++-multilib


/usr/bin/ld: cannot find -lncurses

collect2: ld returned 1 exit status

make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1

make: *** Waiting for unfinished jobs....


解決包:$ sudo aptitude search lib32ncurses5-dev


/usr/bin/ld: cannot find -lz

collect2: ld returned 1 exit status

make: *** [out/host/linux-x86/obj/EXECUTABLES/zipalign_intermediates/zipalign] Error 1

make: *** Waiting for unfinished jobs....


解決包:$ sudo aptitude install lib32z-dev


同時(shí),網(wǎng)友kees.jongenburger提出了使用getlibs(該工具可自動解決32位程序在64位系統(tǒng)上的依賴關(guān)系)來解決這個(gè)問題。具體用法如下:

$ getlibs -l libz.so

libz.so: zlib1g-dev

	The following i386 packages will be installed:
                                                            	zlib1g-dev
                                                            	Continue [Y/n]? y
                                                            	Downloading ...
                                                            	Installing libraries ...
                                                            	具體getlibs工具的介紹請參考網(wǎng)址: 	http:///showthread.php?t=474790 

注:在“獲取Android源代碼”一節(jié)中已介紹使用java 6時(shí)會有不兼容的問題,但經(jīng)過測試發(fā)現(xiàn),如果僅僅makemake 不包括make sdk),用sunjava6jdk 是沒有問題的。而make sdk,就會有問題,嚴(yán)格來說是在make doc 時(shí)會出問題,它需要的javadoc 版本為1.5。

因此,我們安裝完sun‐java6‐jdk 后最好再安裝sun‐java5‐jdk,或者只安裝sun‐java5‐jdk。這里sun‐java6‐jdk sun‐java5‐jdk 都安裝,并只修改javadoc.1.gz javadoc。因?yàn)橹挥羞@兩個(gè)是make sdk 用到的。這樣的話,除了javadoc 工具是用1.5 版本,其它均用1.6 版本,java的安裝目錄及結(jié)構(gòu)如下:


derek@derek-desktop:/usr/lib/jvm$ ls -l

total 4

lrwxrwxrwx 1 root root 19 2010-08-20 23:19 java-6-sun -> java-6-sun-1.6.0.20

drwxr-xr-x 8 root root 4096 2010-08-21 00:06 java-6-sun-1.6.0.20

sudo aptitude install sun‐java5‐jdk (現(xiàn)在發(fā)現(xiàn)找不到java 5的包,可能是源的問題)


修改javadoc link

$ cd /etc/alternatives

$ sudo rm javadoc.1.gz

$ sudo ln ‐s /usr/lib/jvm/java‐1.5.0‐sun/man/man1/javadoc.1.gz javadoc.1.gz

$ sudo rm javadoc

$ sudo ln ‐s /usr/lib/jvm/java‐1.5.0‐sun/bin/javadoc javadoc


但是,本人在編譯2.2系統(tǒng)時(shí)測試發(fā)現(xiàn)使用java 6并沒有上述問題。估計(jì)應(yīng)該是解決了。所以上述對javadoc這快的處理就可以不做了。





設(shè)置環(huán)境變量


$ vim ~/.bashrc

增加如下的環(huán)境變量,包括java以及android程序開發(fā)、運(yùn)行的一些環(huán)境變量


JAVA_HOME=/usr/lib/jvm/java-6-sun

export JAVA_HOME

JRE_HOME=${JAVA_HOME}/jre

export JRE_HOME

export ANDROID_JAVA_HOME=${JAVA_HOME}

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH

export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin

HOME_BIN=~/android/bin/

export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN}


$ source ~/.bashrc (使環(huán)境變量的設(shè)置立即生效,即同步變化)


編譯android源碼

$ cd ~/android/androidplatform/ cd android源碼目錄)

$ make (或者使用 make -jn 命令,其中,n值的確定參考原則為2m-1,m為處理器核數(shù),本人實(shí)驗(yàn)機(jī)子為雙核,故用 make -j3

這個(gè)過程很久,大概花兩個(gè)小時(shí)左右,編譯完后將得到~/android/androidplatform/out 目錄,可參加附件中的目錄樹文件。


編譯SDK

直接執(zhí)行make 是不包括make sdk 的。make sdk 用來生成SDK,這樣,我們就可以用與源碼同步的SDK 來開發(fā) android 了。

1、查看~/android/androidplatform/frameworks/base/include/utils/Asset.h

$ cd ~/android/androidplatform/

$ vim frameworks/base/include/utils/Asset.h


查看 UNCOMPRESS_DATA_MAX 值:

enum {

/* data larger than this does not get uncompressed into a buffer */

#ifdef HAVE_ANDROID_OS

UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024

#else

UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024

#endif

};


由于Eclipse 編譯工程需要大于1.3M buffer,如果僅為1 * 1024 * 1024

請改為2 * 1024 * 1024,由于本人實(shí)驗(yàn)的版本為2.2已使用enum進(jìn)行了更正,故不用修改。


輸入以下命令進(jìn)行sdk編譯:

$ make sdk

注意如果這里出現(xiàn)問題請按照上面所介紹的將javadoc換回1.5版本。

編譯后生成的SDK 存放在~/android/android/platform/out/host/linuxx86/sdk/ , 此目錄下有androidsdk_eng.xxx_linuxx86.zip androidsdk_eng.xxx_linuxx86 目錄。androidsdk_eng.xxx_linuxx86 就是SDK 目錄。參加附件中的目錄樹文件。

模擬器使用
進(jìn)入~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/tools目錄下,這里有很多Android的工具,其中模擬器對應(yīng)的應(yīng)用 程序是emulator。下面是正確使用模擬器的步奏:

輸入以下命令啟動Android SDK AVD 管理器,可以通過該圖形化界面進(jìn)行很多操作,比如SDK下載,虛擬設(shè)備的創(chuàng)建,啟動模擬器等等。


derek@derek-desktop:~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/tools$ ./android

Starting Android SDK and AVD Manager

No command line parameters provided, launching UI.

See 'android --help' for operations from the command line.


列出機(jī)子上的所有target版本,可以理解為android sdk 版本。


derek@derek-desktop:~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/tools$ ./android list target


Available Android targets:

id: 1 or "android-AOSP"

Name: Android AOSP (Preview)

Type: Platform

API level: AOSP

Revision: 2

Skins: WQVGA400, WQVGA432, WVGA800, WVGA854, HVGA (default), QVGA


創(chuàng)建一個(gè)名為 My_AVD_2.2的虛擬設(shè)備


derek@derek-desktop:~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/tools$ ./android create avd -n My_AVD_2.2 -t 1

Android AOSP (Preview) is a basic Android platform.

Do you wish to create a custom hardware profile [no]

Created AVD 'My_AVD_2.2' based on Android AOSP (Preview),

with the following hardware config:

hw.lcd.density=160


使用剛創(chuàng)建的虛擬設(shè)備啟動模擬器


derek@derek-desktop:~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/tools$ ./emulator -avd My_AVD_2.2


創(chuàng)建虛擬sdcard,用于模擬器中數(shù)據(jù)和外部數(shù)據(jù)的交互, 虛擬SD卡的大小不應(yīng)該小于100M,否則在后期的文件系統(tǒng)打包過程中,有可能會有SD卡存儲空間不夠的問題。


derek@derek-desktop:~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/tools$ ./mksdcard -l smallone 256M ~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/sdcard.img


使用剛剛創(chuàng)建的虛擬sdcard創(chuàng)建一虛擬設(shè)備


derek@derek-desktop:~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/tools$ ./android create avd -n MyAOSP -t 1 -c ~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/sdcard.img


列出本機(jī)上的所有虛擬設(shè)備


derek@derek-desktop:~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/tools$ ./android list avd

Available Android Virtual Devices:

Name: MyAOSP

Path: /home/derek/.android/avd/MyAOSP.avd

Target: Android AOSP (Preview) (API level AOSP)

Skin: HVGA

Sdcard: /home/derek/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/sdcard.img

---------

Name: My_AVD_2.2

Path: /home/derek/.android/avd/My_AVD_2.2.avd

Target: Android AOSP (Preview) (API level AOSP)

Skin: HVGA

Sdcard: 256M


使用剛編譯完成的SDK中的模擬器啟動android系統(tǒng)時(shí),默認(rèn)采用的系統(tǒng)鏡像為~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/platforms/android-AOSP/images目錄(剛編譯完的SDK目錄中的android-sdk_eng.derek_linux-x86/platforms/android-AOSP/images)下的kernel-qemu ramdisk.img system.img userdata.img 。

其中kernel-qemu為內(nèi)核鏡像,其他組合為文件系統(tǒng)。

當(dāng)然也可以使用自己編譯的內(nèi)核鏡像,關(guān)于如果編譯內(nèi)核的問題 會在后續(xù)文章中說明。


使用名為MyAOSP 的虛擬設(shè)備啟動模擬器,并規(guī)定系統(tǒng),數(shù)據(jù)等的映象文件路徑,模擬器內(nèi)核采用prebuild/android-arm/kernel/kernel-qemu。當(dāng)然也可以使用自己編譯的內(nèi)核鏡像,關(guān)于如果編譯內(nèi)核的問題 會在后續(xù)文章中說明。


derek@derek-desktop:~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/tools$ ./emulator -avd MyAOSP -sysdir ~/android/androidplatform/out/target/product/generic/ -data ~/android/androidplatform/out/target/product/generic/userdata.img -ramdisk ~/android/androidplatform/out/target/product/generic/ramdisk.img -kernel ~/android/androidplatform/prebuilt/android-arm/kernel/kernel-qemu

也可以再加上下面的參數(shù)進(jìn)行啟動,

-system ~/android/androidplatform/out/target/product/generic/system.img

-image ~/android/androidplatform/out/target/product/generic/system.img

但后者已過時(shí)。


可以輸入emulator -help 進(jìn)行進(jìn)一步的工作。

注意:細(xì)心的人可能會發(fā)現(xiàn)剛剛編譯生成的SDK目錄下的tools目錄(~/android/androidplatform/out/host/linux-x86/sdk/android-sdk_eng.derek_linux-x86/tools)中的所有工具在剛剛源碼編譯完的host目錄下的bin目錄(~/android/androidplatform/out/host/linux-x86/bin)中都有。

























 

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产精品午夜福利免费阅读 | 欧美成人欧美一级乱黄| 九九热视频免费在线视频| 欧美日韩有码一二三区| 国产免费一区二区三区av大片| 九九热视频网在线观看| 中文字幕人妻一区二区免费| 婷婷亚洲综合五月天麻豆| 丰满少妇高潮一区二区| 欧洲精品一区二区三区四区| 激情偷拍一区二区三区视频| 欧美午夜国产在线观看| 黄色国产自拍在线观看| 97人妻精品一区二区三区免| 日韩精品亚洲精品国产精品| 神马午夜福利免费视频| 日本高清一道一二三区四五区| 国产精品不卡一区二区三区四区| 亚洲五月婷婷中文字幕| 好吊色免费在线观看视频| 欧美精品久久99九九| 黄色国产一区二区三区| 一二区中文字幕在线观看| 在线观看视频国产你懂的| 国产精品亚洲综合色区韩国| 精品国模一区二区三区欧美| 亚洲一区精品二人人爽久久| a久久天堂国产毛片精品| 亚洲一区在线观看蜜桃| 国产亚洲精品俞拍视频福利区| 亚洲欧洲一区二区综合精品| 高清亚洲精品中文字幕乱码| 99视频精品免费视频播放| 国产精品日韩欧美第一页| 日本加勒比系列在线播放| 老熟女露脸一二三四区| 国产91麻豆精品成人区| 欧美熟妇一区二区在线| 内射精子视频欧美一区二区| 国产白丝粉嫩av在线免费观看| 国产美女精品人人做人人爽|