android 4.2.1 下载和编译

时间:2021-12-03 03:48:52

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

1mkdir ~/bin

PATH=~/bin:$PATH

2curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo >~/bin/repo

chmod a+x ~/bin/repo

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

3mkdir android_jellybean

cd android_jellybean


4repo 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也已经上传。

5repo 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}