在Ubuntu上下载、编译、运行Android系统

在Ubuntu上下载、编译、运行Android系统


在Linux开发环境搭建 三 (在Ubuntu上Android/Linux编译环境的准备)一文中,我们已经将Android的编译环境搭建OK。在本文中,我们以Android_4.4.2为例,说明其下载、编译及运行的方法。


一、Android源码下载

Google被封,对于站位Google阵营的我们,无疑是一个不幸。因此,国人想要下载一份Android源码,将变得困难重重。
Google官网下载行不通(除非有人),网上有心人整理了如何曲线救国的方法,
http://blog.csdn.net/zbunix/article/details/8460422/
即便如此,博主并没有采用这样的方式下载Android源码。两个原因,一是这种下载方式需要安装git,是连同repo一并下载的,这样code size会很大;二是下载时间超长,或许长达几天的下载时间,过程中还有可能下载失败。

其实,
还有好心人,下载源码去repo后,压缩打包,放于网络,与人方便。咱们也可以下载这样的源代码。下面便是博主分享的Android_4.4.2源代码,欢迎下载。
http://pan.baidu.com/s/1micVfyK


二、编译Android

  1. 将下载下来的Android_4.4.2压缩文件android4.4.2.tar.gz放到~/目录(路径可自由决定),然后解压。使用如下命令解压android4.4.2.tar.gz,将出现442文件夹。
    cd ~
    tar -zxvf android4.4.2.tar.gz

  2. 进入442目录,执行make,开始编译Android
    cd 442
    make

  3. 编译过程中可能遇到问题
    如果在编译过程中,遇到build error,解决的方法是,百度error信息,然后尝试找到解决方法,然后,继续make,直到编译完成。

编译结束,如下图:
在Ubuntu上下载、编译、运行Android系统_第1张图片
编译结束后,会在442/目录下生成out/目录,其下包含编译生成的image文件等:
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
Installed file list: out/target/product/generic/installed-files.txt
在Ubuntu上下载、编译、运行Android系统_第2张图片

在前面已经提及过,第一次full build的时间比较久,博主实践的结果是6~7小时。


三、运行模拟器emulator

模拟器运行需要四个文件,分别是Linux Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。
执行emulator命令时,如果不带任何参数,则Linux Kernel镜像默认使用~/442/prebuilts/qemu-kernel/arm/目录下的kernel-qemu文件,而Android镜像文件则默认使用ANDROID_PRODUCT_OUT(待会儿export)目录下的system.img、userdata.img和ramdisk.img,也就是我们刚刚编译出来的镜像文件。

  1. 配置emulator环境变量,在Terminal终端中输入:
    export PATH=$PATH:~/442/out/host/linux-x86/bin
    export ANDROID_PRODUCT_OUT=~/442/out/target/product/generic

  2. 运行模拟器
    cd 442
    emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ./out/target/product/generic/ramdisk.img

注意,

  1. 如果遇到如下类似的error,使用chmod -R 777 ~/442/prebuilts/qemu-kernel/* 修改权限。
    qemu: could not load kernel ‘./prebuilts/qemu-kernel/arm/’

  2. 如果模拟器有启动,但是一直黑屏,可以试试如下命令
    emulator -partition-size 1024 -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

  3. 上面命令中,ramdisk.img一定要带路径,否则出错。

终于见到熟悉的Android界面

在Ubuntu上下载、编译、运行Android系统_第3张图片


至此,我们在模拟器上运行了自己编译出来的Android image。其中内核却是使用预编译准备好的kernel-qemu(or kernel-qemu-armv7)。那么,我们是否也可以编译自己的linux内核呢?可以的。下一章,我们将学习如何在Ubuntu上编译自己的linux内核uImage,敬请期待……


itxiebo
20160404

你可能感兴趣的:(Android)