本人安装的是ubuntu12.04 64位系统
1、mkdir ~/bin
PATH=~/bin:$PATH
2、curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo >~/bin/repo
chmod a+x ~/bin/repo
注:因为google.com被拉黑,可能连接不上。如果从其他链接下载,版本较低的话,也会出现问题,本人将该脚本上传,以备不时之需。
3、mkdir android_jellybean
cd android_jellybean
4、repo init -u https://android.googlesource.com/platform/manifest -bandroid-4.2.1_r1
在repo sync之前,修改了.repo/manifest.xml文件(先备份一下),主要是去掉一些不想下载的仓库,如:device/asus/grouper,device/asus/tilapia, device/lge/mako, device/ti/panda,device/samsung/*,只保留device下通用的仓库,因为这些仓库实在太大了,当前也用不到。可以需要时再下载。精简的manifest.xml也已经上传。
5、repo sync
由于网速原因,执行了四五次才全部下载完毕,如果不是事先去掉了一些仓库,可能执行次数更多,时间花费也会更长。下载文件大小总共大概4.3G,在.repo/projects查看的。我宽带是1MB/s,如果网络稳定,1个半小时应该能够搞定。但是由于google网站被“特殊关照”,连接过程中总不免磕磕碰碰,执行了3个多小时。
6、编译。source ./build/envsetup.sh
通过apt-get下载安装需要的软件。
由于可能找不到tools.jar,需要在oracle网站上下载jdk
export ANDROID_JAVA_HONE,配置jdk安装的路径。
export PATH,增加jdk的bin目录
出现的错误
make: *** No rule to make target `dalvik/vm/mterp/out/InterpAsm-x86.S', needed by `out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/mterp/out/InterpAsm-x86.o'. Stop.
cd dalvik/vm/mterp
sh ./rebuild.sh
make: *** No rule to make target “out/target/product/generic/obj/SHARED_LIBRARIES/libdvm_intermediates/compiler/template/out/CompilerTemplateAsm-armv7-a.o” needed by “dalvik/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S”。 Stop
cd dalvik/vm/compiler/template
sh ./rebuild.sh
编译出来的out路径总大小有20G左右,编译时间4个小时左右。
7、默认编译出来的是odex版本,需要修改脚本。
应该是在./build/target/board/generic/BoardConfig.mk下,将WITH_DEXPREOPT设置为false。(未经测试)
===============================================================================
Kernel 源码下载和编译
1、git clone https://android.googlesource.com/kernel/goldfish.git
大小不到500M
2、下载工具prebuillt
git clone https://android.googlesource.com/platform/prebuilt
大小将近2G
说明:这个是没有必要下载的,在prebuilts/路径下已经有工具链,可以配置如下
export PATH=$PATH:~/android_jellybean/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin
且如果将prebuilt放在android_jellybean下,再编译android时会有冲突。
3、在git目录下执行git branch -a,显示
master
remotes/origin/HEAD -> origin/master
remotes/origin/android-goldfish-2.6.29
remotes/origin/android-goldfish-3.4
remotes/origin/linux-goldfish-3.0-wip
remotes/origin/master
4、git checkout remotes/origin/android-goldfish-3.4
但是在arch/arm/configs/下没有看到模拟器相关的goldfish相关的配置,于是执行
git checkout remotes/origin/android-goldfish-2.6.29
这时该路径下有goldfish_defconfig和goldfish_armv7_defconfig
5、export PATH=$PATH:~/android_jellybean/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin(修正:见红色字体说明)
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
6、make goldfish_armv7_defconfig (在android 4.2.1中使用goldfish_defconfig编译的kernel无法启动)
make
即可在arch/arm/boot/下编译出zImage
7、使用新编译的kernel启动模拟器
emulator -kernel arch/arm/boot/zImage -sysdir out/tartget/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
说明:使用-ramdisk可能出现错误:qemu: could not load initrd 'ramdisk.img',需要在-ramdisk 后附上绝对路径out/target/product/generic/ramdisk.img
如果不编译kernel,我的命令是:./out/host/linux-x86/bin/emulator-arm -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7 -sysdir out/target/product/generic/ -system system.img -data userdata.img -ramdisk out/target/product/generic/ramdisk.img
8、如果不需要调试linux内容,可以不下载linux代码,系统默认使用prebuilts/qemu-kernel下的kernel image,配置如下:
export ANDROID_PRODUCT_OUT=~/android_kk/out/target/product/generic
export ANDROID_PRODUCT_OUT_BIN=~/android_kk/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT}:${ANDROID_PRODUCT_OUT_BIN}