Ubuntu 11.10及android4.0開發環境安裝
----------(根據本人安裝時遇到的問題,根據網絡文檔整理而成)
一. 虛擬機及ubuntu11.10環境安裝
1. 軟件準備
從以下的路徑下載ubuntu 11.10,
http://www.ubuntu.org.cn/download/ubuntu/download/
準備虛擬機,本人使用vmware 6.5.2 ,新下載的7.0和8.0無法安裝
2.軟件安裝
在vmware中選擇從ISO文件安裝,有個等待的過程。
3.安裝vmware tools
ubuntu.ISO自帶該工具,由於工具是rpm格式,ubuntu11.10的可執行文件的安裝包格式是deb,所以需要轉換。
alien -d xxx.xxx.rpm //使用alien將 rpm 格式文件轉成deb
sudo dpkg -i xxx.xxx.deb //安裝
安裝完成後,在/mnt/hgfs目錄下沒有共享的文件目錄,所以需要執行以下的兩步命令,如下:
sudo apt-get install open-vm-dkms
sudo mount -t vmhgfs .host:/ /mnt/hgfs
4. 常用命令
打開終端窗口:ctl+alt+t
rpm -ivh xxx.xxx.rpm
5.安裝常用的軟件和jdk
需要安裝JDK和相關的軟件:
如下:(Android技術內幕 系統卷)
$sudo apt-get install git-core gnupg valgrind flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zliblg-dev
在實際的操作中有如下的變化:
Libsdl-dev -------à libsdl1.2-dev
Zliblg-dev -------à 沒有找到
附:參考鏈接中的參數
參考: http://source.android.com/source/initializing.html
Java 6: for Gingerbread and newer
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
運行到後面就顯示configuring sun-java6-jre,感覺就像中斷了似的,ok鍵點不了,要先點一下tab鍵才能選ok鍵,剩下的一路next就可以了。
二.Android 源碼和內核的獲取
參考鏈接:http://source.android.com/source/downloading.html
建立目錄 android------|------bin
|------source-----|kernel------|goldfish------|.git
| kernel詳細代碼
1.獲取repo
1.
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
2. $ chmod a+x ~/bin/repo
2. 下載android源碼
$ repo init -u https://android.googlesource.com/platform/manifest
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
執行完以上,會出現提示:
repo initialized in /home/lieye/android/source
然後執行下一步。
$ repo sync
3. 獲取kernel
在source目錄下建立子目錄kernel
$ git clone https://android.googlesource.com/kernel/common.git
$ git clone https://android.googlesource.com/kernel/goldfish.git
$ git clone https://android.googlesource.com/kernel/msm.git
$ git clone https://android.googlesource.com/kernel/omap.git
$ git clone https://android.googlesource.com/kernel/samsung.git
$ git clone https://android.googlesource.com/kernel/tegra.git
我選擇了
$ git clone https://android.googlesource.com/kernel/goldfish.git
執行以上的命令後,會建立子目錄 goldfish和goldfish/.git , 然後在 goldfish目錄下執行命令:
Git branch
Git branch –a
Git checkout –b goldfish origin/android-goldfish-2.6.29
這樣就把代碼拉下來了。
三.編譯android源碼和工具包
1.編譯android源碼
進入source目錄下,執行make 即可。
編譯完成後,可以在源碼目錄的out/target/product/generic/目錄下看到編譯好的ramdisk.img、system.img和userdata.img了。
編譯中出現的問題:
換用gcc與g++的較低版本
Ubuntu11.10自帶的gcc與g++版本爲4.6,用該版本編譯android時會遇到一些錯誤,錯誤如下所示:
1 host Prebuilt:monkeyrunner
out/host/linux-x86/obj/EXECUTABLES/monkeyrunner_intermediates/monkeyrunner
2 host C++: obbtool <= frameworks/base/tools/obbtool/Main.cpp
3 <命令行>:0:0: 錯誤: “_FORTIFY_SOURCE”重定義[-Werror]
4 <built-in>:0:0: 附註: 這是先前定義的位置
5 cc1plus:所有的警告都被當作是錯誤
解決方法:
網上有文章說修改build/core/combo/HOST_linux-x86.mk文件,將
1 HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
修改成
1 HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
這種方法雖然能解決該問題,但也會引出新的問題,還要繼續不斷的修改,很麻煩,而且也會破壞android源碼的原生狀態。但是如果使用4.4版本的gcc與g++,則不會出現這些錯誤,方法如下:
通過gcc -v命令可以發現gcc庫在/usr/lib/gcc/i686-linux-gnu目錄下,該目錄下有當前系統支持的各種版本gcc庫 。在安裝gcc 4.4前該目錄下是沒有4.4目錄的,安裝gcc 4.4後該目錄下就會多出4.4這個目錄,且該4.4目錄下有各種相應庫文件。
ubuntu 32bit系統下安裝gcc 4.4的最好方法是僅用以下兩條命令,不需要其它命令,否則編譯時可能會出錯:
1 $sudo apt-get install gcc-4.4
2 $sudo apt-get install g++-4.4
裝完後進入到/usr/bin目錄下
1 $ls -l gcc*
會顯示以下結果
lrwxrwxrwx 1 root root 7 2011-10-29 09:11 gcc -> gcc-4.6
-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6
發現gcc鏈接到gcc-4.6, 需要將它改爲鏈接到gcc-4.4,方法如下:
1 $sudo mv gcc gcc.bak
2 $sudo ln -s gcc-4.4 gcc
同理,對g++也做同樣的修改:
1 $ls -l g++*
lrwxrwxrwx 1 root root 7 2011-08-14 15:17 g++ -> g++-4.6
-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4
-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6
需要將g++鏈接改爲g++-4.4:
1 $sudo mv g++ g++.bak
2 $sudo ln -s g++-4.4 g++
再查看gcc和g++版本號:
gcc -v
g++ -v
均顯示gcc version 4.4.6 ,說明gcc 4.4安裝成功。
2.編譯android 內核(見5.重新編譯內核)
1.設置環境變量
Export PATH=$PATH:/home/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
Export ARCH = arm
2.設置交叉編譯參數
找到kernel目錄下的文件makefile,修改如下
1) CROSS_COMPILE = arm-eabi-
2) 找到如下行,LDFLAGS_BUILD_ID=$(patsubst –W1$(comma)%,%, $(call ld-option, -W1$(comma) –build-id,), 將改行置空,如下:
LDFLAGS_BUILD_ID=
3. 編譯鏡像
進入kernel目錄,輸入如下的命令:
Make goldfish_defconfig //在5.重新編譯內核
Make
編譯完成後生成的鏡像位於 /kernel/arch/arm/boot目錄下的zImage
3.編譯SDK
運行如下的命令
$make PRODUCT-sdk-sdk
執行該命令前先檢查下是否已經生成了,存放在/out/host/linux-x86/sdk下,會刪除編譯android源碼時的部分工作。
4. 模擬器
./mksdcard 1024M sdcard.img
./android create avd –target 1 –name lieye –sdcard.img
./android list avd
./emulator –avd lieye
./emulator –system ////system.img
-data ////userdata.img
-ramdisk ////ramdisk.img
-kernel ////zImage
用上述編譯的,運行結果如下:
emulator: ERROR: Invalid or missing kernel image file: /home/result/zImage
原因待查。
5. 重新編譯內核
如下:
Make clean
make goldfish_armv7_defconfig
make
重新加載,模擬器可啓動。