本人安装的是ubuntu12.04 64位系统

1、mkdir ~/bin

PATH=~/bin:$PATH

2、curl https:///dl/googlesource/git-repo/repo >~/bin/repo

chmod a+x ~/bin/repo

注:因为被拉黑,可能连接不上。如果从其他链接下载,版本较低的话,也会出现问题,本人将该脚本上传,以备不时之需。

3、mkdir android_jellybean

cd android_jellybean


4、repo init -u https:///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/

通过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/下,将WITH_DEXPREOPT设置为false。(未经测试)


===============================================================================

Kernel 源码下载和编译

1、git clone https:///kernel/goldfish.git

     大小不到500M


2、下载工具prebuillt

     git clone https:///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
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}