您的位置:首页 > 移动开发 > Android开发

Ubuntu12.04 64位下载编译 Android 4.2源码

2013-06-21 18:21 459 查看
废话不多说,直接上步骤

一、下载源码

1、Android源码采用的是Git工具管理,所以一定要安装Git,其次下载源码也需要很多关联包,最好在执行下载任务之前全都下载配置好。

zk@zk-K45VM:~/AndroidSource$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils
xsltproc gcc-multilib  lib32readline5-dev lib32z-dev (lib32readline-gplv2-dev lib32z1-dev)

这一句差不多安装了所需的所有包。

为了下载更顺利,先修改hosts

zk@zk-K45VM:~$ sudo vim /etc/hosts

增加以下内容

74.125.31.82 www.googlesource.com

74.125.31.82 android.googlesource.com

203.208.46.172 cache.pack.google.com

59.24.3.173 cache.pack.google.com

2、下载repo

zk@zk-K45VM:~$ wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo
zk@zk-K45VM:~$ chmod a+x repo

zk@zk-K45VM:~$ cp repo /bin/

3、准备下载源码

zk@zk-K45VM:~$ mkdir AndroidSource

zk@zk-K45VM:~$  cd AndroidSource

zk@zk-K45VM:~/AndroidSource$ repo init -u https://android.googlesource.com/platform/manifest

执行这句Android主线上的代码下载下来(老罗是这样说的,我没测试),我这里只下载4.2的源码,所以可以直接执行下面这句

zk@zk-K45VM:~/AndroidSource$ repo
init -u https://android.googlesource.com/platform/manifest -b android-4.2_r1

zk@zk-K45VM:~/AndroidSource$
repo sync

此时就开始下载源码了,时间挺漫长的,完全取决于你网络环境的网速,我是下班前开始下,第二天早晨到公司反正已经下好了,中间可能有中断,中断后继续执行   repo
sync 即可。

可能下载过程中还会遇到其他的问题,可参考 我是看的这个链接

出现以下情况时,说明已经下载完成

Fetching projects: 100% (329/329), done.
Checking out files: 100% (9390/9390), done.out files:  44% (4162/9390)
Checking out files: 100% (6764/6764), done.out files:   0% (2/6764)
Checking out files: 100% (24607/24607), done.ut files:  40% (10053/24607)
Checking out files: 100% (18696/18696), done.ut files:   1% (357/18696)
Checking out files: 100% (361/361), done.ng out files:  48% (175/361)
Checking out files: 100% (175/175), done.ng out files:  43% (76/175)
Checking out files: 100% (2407/2407), done. out files:   1% (39/2407)
Checking out files: 100% (137/137), done.ng out files:  44% (61/137)
Checking out files: 100% (40775/40775), done.ut files:  14% (5947/40775)
Checking out files: 100% (93/93), done.
Checking out files: 100% (450/450), done.
Checking out files: 100% (5265/5265), done. out files:  35% (1853/5265)
Checking out files: 100% (13/13), done.king out files:  15% (2/13)
Syncing work tree: 100% (329/329), done.


此时继续执行  repo sync 可以重新校对下载的源码,若是有问题或遗漏了一些文件会重新下载,并从.repo目录中导出到实际源码中

二、编译源码

执行

zk@zk-K45VM:~/AndroidSource$ source
build/envsetup.sh

会出现

including device/asus/grouper/vendorsetup.sh
including device/asus/tilapia/vendorsetup.sh
including device/generic/armv7-a-neon/vendorsetup.sh
including device/generic/armv7-a/vendorsetup.sh
including device/generic/mips/vendorsetup.sh
including device/generic/x86/vendorsetup.sh
including device/lge/mako/vendorsetup.sh
including device/samsung/maguro/vendorsetup.sh
including device/samsung/manta/vendorsetup.sh
including device/samsung/toroplus/vendorsetup.sh
including device/samsung/toro/vendorsetup.sh
including device/ti/panda/vendorsetup.sh
including sdk/bash_completion/adb.bash


然后直接执行make即可

zk@zk-K45VM:~/AndroidSource$
make

也可以执行 

zk@zk-K45VM:~/AndroidSource$
make -j4

表示用四个线程来编译

第一次编译我用了大约两三个小时(i7
四核 2.3,4G内存),反正是吃饭回来就已经编译好了,编译的时候机器非常的卡,最好就让它只做这一件事。

..............
Done!
Install: out/target/product/generic/system/app/Browser.odex
Install: out/target/product/generic/system/app/Browser.apk
build/tools/generate-notice-files.py  out/target/product/generic/obj/NOTICE.txt  out/target/product/generic/obj/NOTICE.html "Notices for files contained in the filesystem images in this directory:" out/target/product/generic/obj/NOTICE_FILES/src
Combining NOTICE files into HTML
Combining NOTICE files into text
Installed file list: out/target/product/generic/installed-files.txt
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Running:  mkyaffs2image -f out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
zk@zk-K45VM:~/AndroidSource$

将编译好的Android镜像放到模拟器
1:设置环境变量:
~/Android$ export PATH=$PATH:~/AndroidSource/out/host/linux-x86/bin
~/Android$ export ANDROID_PRODUCT_OUT=~/AndroidSource/out/target/product/generic
其中,~/AndroidSource/out/host/linux-x86/bin有我们要执行的emulator命令,而~/AndroidSource/out/target/product/generic是Android镜像存放目录
2:运行模拟器
模拟器运行需要四个文件,分别是Linux Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。执行emulator命令时,如果不带任何参数,则Linux Kernel镜像默认使用~/AndroidSource/prebuilts/qemu-kernel/arm/kernel-qemu-armv7目录下的kernel-qemu文件,而Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img,也就是我们刚刚编译出来的镜像问题。
~/AndroidSource$ emulator -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7
-sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
出现问题:qemu: could not load initrd 'ramdisk.img'
网上有更改权限解决: chmod 777 ~/out/target/product/generic
chmod 777 ~/out/target/product/generic/ramdisk.img
这里还是不行,所以就把 -ramdisk ramdisk.img 去掉,结果运行成功



此时源码下载编译结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息