本人安装的是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
make
竟然一路下来,没有出错,有点出乎意料。编译出来的out路径总大小有20G左右,编译时间4个小时左右。
7、默认编译出来的是odex版本,需要修改脚本。
应该是在./build/target/board/generic/BoardConfig.mk下,将WITH_DEXPREOPT设置为false。(未经测试)
以前编译时出现很多问题。
当时我工程是在windows上使用cygwin下载的,直接在linux下编译。那是错误百出啊,包括:
1>JDK找不到,我当时安装的是openJDK,执行java -version是没有问题的,还专门编译一个helloworld。android编译脚本中有JAVA_HOME变量,修改之后,又有新问题;
2>JDK中有找不到tools.java,还是有变量配置不对。
3>然后是/build/tools/findleaves.py等一堆文件没有权限,本人对linux菜鸟,最初在root下都无法更改这些文件权限。后来添加了可执行权限。
4>还有就是prebuilts/tools/gcc-sdk/gcc:行40:prebuilts/tools/gcc-sdk/../../gcc/linux-x86/host/i686-linux-glibc2.7-4.6/bin/i686-linux-gcc:没有那个文件或目录。
找了一下,网上的解决方案是:
cd prebuilts/tools/
git reset --hard HEAD^
cd ../../external/qemu
git reset --hard d4f5a3ae87a7246613188940c1667bf2880da402
但是我执行之后还是出现这个错误,不想再摸着石头过河了,索性在linux上下载了一下,没想到如此给力。
===============================================================================
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',但在out/target/product/generic/目录下执行chmod -R 777 * 能够临时解决(需要在目录out/target/product/generic下执行emulator命令??)。