android 4.2.1 下载和编译

本人安装的是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

make

竟然一路下来,没有出错,有点出乎意料。编译出来的out路径总大小有20G左右,编译时间4个小时左右。


7、默认编译出来的是odex版本,需要修改脚本。

应该是在./build/target/board/generic/BoardConfig.mk下,将WITH_DEXPREOPT设置为false(未经测试)



以前编译时出现很多问题。

当时我工程是在windows上使用cygwin下载的,直接在linux下编译。那是错误百出啊,包括:

1>JDK找不到,我当时安装的是openJDK,执行java -version是没有问题的,还专门编译一个helloworldandroid编译脚本中有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命令??)。

你可能感兴趣的:(android,编译)