1. 设置环境变量:
USER-NAME@MACHINE-NAME:~/Android$ export PATH=$PATH:~/Android/out/host/linux-x86/bin
USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic
其中,~/Android/out/host/linux-x86/bin有我们要执行的emulator命令,而~/Android/out/target/product/generic是Android镜像存放目录,下面执行emulator命令时会用到。
2. 运行模拟器。
USER-NAME@MACHINE-NAME:~/Android$ emulator
模拟器运行需要四个文件,分别是Linux Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。执行emulator命令时,如果不带任何参数,则Linux Kernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件,而Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img,也就是我们刚刚编译出来的镜像问题。
当然,我们也可以以指定的镜像文件来运行模拟器,即运行emulator时,即:
USER-NAME@MACHINE-NAME:~/Android$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
但是又来了一个错误:
emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.
If you are an Android SDK user, please use '@<name>' or '-avd <name>'
to start a given virtual device (see -help-avd for details).
Otherwise, follow the instructions in -help-disk-images to start the emulator
解决方法:
进入到Android源码目录中执行:
source build/envsetup.sh
lunch sdk-eng
然后再执行:
emulator
可以启动模拟器
再次运行,好吧有结果了:
编译完Android源码之后,写还得再来看看如何编译Android内核源码,为什么要编译Android内核源码呢?这个是为了后续的工作做准备,后面会说到的,其实我们上面编译的Android源码他的内核源码Google已经编译好了,存放在:源目录/prebuilt/android-arm/kernel/kernel-qemu;
下面我们就来看看如何编译内核源码吧,同样如此,想编译内核源码的话,我们需要内核源码,又是一件痛疼的事,网上有很多资源都是说使用goldfish版本的,然后就去:git clone
反正我是下载失败,原因和下载源码是一样的,google服务器连接失败,那怎么办呢?
当时我是没有办法了,就去各种搜索,结果有人说goldfish是连接不上了,有人将内核源码放到github上了,地址如下:
https://github.com/android/kernel_common
如果下载失败的话,我已经下载好了,可以去以下的连接去下载: 链接: 密码: fach
我就去下载了,大约几百M吧,下载下来之后,就进行编译吧,在编译之前我们需要修改点东西:
修改文件夹中的Makefile文件中的编译环境
将
ARCH ?= (SUBARCH)
CROSS_COMPILE ?=
修改成
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
如图:
采用的是arm体系结构,交叉编译使用的是arm-eabi-XXX工具,这个值只是个前缀
下面我们就来编译吧,进入到文件夹中进行编译结果发现,说找不到指定的arm-eabi-gcc工具(这个错误发生在我编译Android4.4版本的时候,因为这个版本的源码中找不到指定的prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin目录,但是最后编译Android2.3.7版本的话就有了,所以针对于4.4版本没有的话,我们怎么办呢?
下载地址:
------------------------------------------分割线------------------------------------------
FTP地址:ftp://ftp1.linuxidc.com
用户名:ftp1.linuxidc.com
密码:
在 2016年LinuxIDC.com\1月\编译Android系统源码和内核源码\
------------------------------------------分割线------------------------------------------
下载下来之后一般是存放到/usr/lib目录中,然后修改一下环境变量,这个可以参考前面配置JDK环境变量的方法
首先需要:make goldfish_defconfig
但是找不到指定文件,发现这个文件只在goldfish版本中,而我们下载的是kernel_common,这时候我们可以:
make menuconfig
然后选择对应的配置,但是问题又来了,哪些选项是必选的,哪些是不需要选的,反正最后编译总是失败,搞伤的了,所以还是得去找goldfish版本的(我上面之所以介绍了kernel_common版本的,就是记录一下我操作的过程,虽然最后失败了),不过运气挺好的,最后还真的被我找到了,具体的地址我记得不太清楚了,但是我放到网盘了,里面有相应的说明,goldfish下载地址:
链接: 密码: fach
下载下来之后,可以编译了,
make goldfish_defconfig
然后
make
这个编译的过程很快,不到一个小时吧
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
这样就编译成功了,那么我就是用这个内核镜像来启动模拟器吧: