Android 4.0.1 源碼下載,模擬器編譯和運行
http://blog.csdn.net/rambo2188/article/details/6943382
http://www.linuxidc.com/Linux/2011-11/47808.htm
轉注:本文由rambo2188在CSDN上首發,linuxidc上的貌似該文的轉載
----------------------------------------------------------------
[1] Android ICS 下載
----------------------------------------------------------------
http://source.android.com/source/downloading.html 上有最新的ICS 原始碼同步的地址。如果環境已經設定好了的話,同步最新的代碼非常的簡單:
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
$ repo sync
轉註:
主幹:$ repo init -u https://android.googlesource.com/platform/manifest.git
4.03:$ repo init -u https://android.googlesource.com/platform/manifest.git -b android-4.0.3_r1
下載完成後主要包含以下目錄:
abi bionic bootable build cts dalvik development device docs external frameworks hardware libcore Makefile ndk out packages prebuilt sdk system
Android4.01配套核心kernel3.0下載
$ git clone http://android.git.kernel.org/kernel/common.git
$ git branch -a
$ git checkout remotes/origin/android-3.0
----------------------------------------------------------------
[2] Android ICS 的編譯
----------------------------------------------------------------
source ./build/envsetup.sh
lunch sdk-eng
make
編譯完成後工作目錄($TOP)裡增加了一個log檔案 v8.log
轉註:
(1) 編譯過程中,可能會由於stdio2.h導致編譯錯誤。正確的stdio2.h是./prebuilt/linux-x86/toolchain/i686-linux-glibc2.7-4.4.3/sysroot/usr/bits/stdio2.h檔案,請重新設定PATH環境變數,將./prebuilt/linux-x86/toolchain/i686-linux-glibc2.7-4.4.3/sysroot/usr放在PATH的最前。
(2) 編譯時間可能會提示需要Java 1.6 SE,實際上編譯時間只需要有Java 1.6 JDK就成
(3) 帶參數make時,toolchain說明最好使用絕對路徑,如:make -j2 ARCH=arm CROSS_COMPILE=/home/hyla/ics/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
----------------------------------------------------------------
[3] Android 4.0.1 模擬器核心最新及編譯步驟
----------------------------------------------------------------
url: http://www.linuxidc.com/Linux/2011-11/47809.htm
由於Android kernel的部分封閉策略,kernel org已經將android kernel踢出主線。原有的同步地址已經被重新導向,再加上android kernel本身結構的調整,很多原來的同步方法已經不能使用。下面是最新的方法,適用於編譯android 4.0.1 模擬器的核心(qemu kernel, goldfish branch)。
原有的方法大多使用以下地址同步
$ git clone git://Android.git.kernel.org/kernel/common.git
$ cd common
$ git branch -a
$git checkout remotes/origin/archive/Android-gldfish-2.6.29
但是我們可以在瀏覽器裡輸入
Android.git.kernel.org/kernel/common.git
它實際上已經被重新導向到
Android.googlesource.com/kernel/common.git
但是這個repo 裡已經不包含 goldfish的分支了。如果同步下來後我們用 git branch -a 將看到只有最新的 3.0 和2.6.39的分支:
$git branch -a
* (no branch)
master
remotes/origin/HEAD -> origin/master
remotes/origin/android-2.6.39
remotes/origin/android-3.0
remotes/origin/master
其實 goldfish分支已經被獨立為一個單獨的repo:http://android.googlesource.com/kernel/goldfish.git
以下是最新的正確的 同步步驟:
$git clone http://android.googlesource.com/kernel/goldfish.git
$cd goldfish
$git branch -a
* (no branch)
master
remotes/origin/HEAD -> origin/master
remotes/origin/android-goldfish-2.6.29
remotes/origin/master
$git checkout remotes/origin/android-goldfish-2.6.29
編譯步驟基本沒有變,但需要使用新的config:
$ make ARCH=arm goldfish_armv7_defconfig
$ make ARCH-arm CROSS_COMPILE=arm-eabi-
...
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
然後就可以用著新的kernel img 來啟動模擬器了:
----------------------------------------------------------------
[4] Android ICS 模擬器的啟動
----------------------------------------------------------------
命令:列出AVD平台
$ cd out/host/linux-x86/sdk/android-sdk_eng.xxx_linux-x86/tools
$ android list targets
Available Android targets:
----------
id: 1 or "Android-14"
Name: Android 4.0
Type: Platform
API level: 14
Revision: 2
Skins: QVGA, WSVGA, HVGA, WVGA854, WXGA720, WQVGA432, WVGA800 (default), WQVGA400, WXGA800
ABIs : armeabi-v7a
命令:自訂AVD
$ android create avd -t 1 -n ics
Auto-selecting single ABI armeabi-v7a
Android 4.0 is a basic Android platform.
Do you wish to create a custom hardware profile [no]
Created AVD 'ics' based on Android 4.0, ARM (armeabi-v7a) processor,
with the following hardware config:
hw.lcd.density=240
vm.heapSize=24
hw.ramSize=512
命令:啟動模擬器,載入自訂的AVD
$ emulator -avd ics
命令:使用自己編譯的核心啟動模擬器
$emulator -kernel ...../kernel/goldfish/arch/arm/boot/zImage &
啟動模擬器,到 Setting => About 去看,kernel現在的確是我們自己編譯的版本了。
命令:使用自己編譯的核心及images啟動模擬器
export DROIDROOT=~/android-sdk-v14-x86
export AVDROOT=~/android-sdk-v14-x86/tools
cd `pwd`/out/target/product/generic
$AVDROOT/emulator -kernel ../../../../kernel/arch/arm/boot/zImage -show-kernel -partition-size 256 -memory 256 -skindir $DROIDROOT/platforms/android-14/skins -skin WVGA800 -shell -sysdir ./ -data userdata.img -ramdisk ramdisk.img -system system.img -sdcard
/~/.android/avd/wvga800v14/sdcard.img