给模拟器准备的编译选项为full-XXX,在编译好后,生成的img镜像文件可以在源码目录下的out/target/product/generic目录下,包含imgbackup,ramdisk.img,system.img,userdata.img,但不包含内核镜像,内核镜像的生成可以按如下操作:
1. 克隆 goldfish 的内核代码(https://android.googlesource.com/kernel/goldfish.git)
2. 使用 git branch -a 查看有哪些分支,然后 checkout 喜欢的内核版本
3. 确定编译的配置
在 arch/arm/configs 目录下有很多个编译配置,给模拟器用的有两个
goldfish_armv7_defconfig
goldfish_defconfig
4. 回到内核的根目录,然后
1 | make goldfish_armv7_defconfig |
再make -jX,过一下就能在arch/arm/boot下生成 zImage内核文件了
接着就是如何运行的问题了。
5. 创建模拟器
1 | android create avd -n goldfish -t 1 |
然后就可以 在home下的/home/XXX/.android/avd/下见到有goldfish的模拟器配置的,一个模拟器有两个需要值得关注的东西:
一个是goldfish.ini,用于配置模拟器的基本信息的,可以在这里指定模拟器所用的android版本等
一个是goldfish.avd,用于存放模拟器相关的具体文件的(不包含system.img及内核文件等 ,但可以 包含sdcard.img等 )
进入到goldfish.avd目录,可以查看config.ini的配置信息,在这里可以配置模拟器的一些外观啊,显示分辨率,以及镜像路径等设置,这里主要关注image.sysdir.1这个配置
6. image.sysdir.1这里指定了加载镜像的路径,默认是android-sdk里的镜像路径(在android-10及以下,镜像是跟sdk具体的平台文件夹放一齐的,在sdk/platforms/android-Ximages下,但以上的话会放在sdk/system-images/android-X/下
如果是使用SDK内的镜像的话可以设置如
image.sysdir.1=platforms/android-10/images/
如果要使用自己的镜像文件,可以设置system.img等 镜像所在的目录,如
image.sysdir.1=/media/Data/SourceCode/JellyBean/out/target/product/generic
即可设置完成。
7. 在启动模拟器之前还需要把系统的配置文件build.prop(也可以从SDK中获取)放置在image.sysdir.1指定的目录下,然后再启动
emulator -avd goldfish
即可.
如果遇到不能启动的,多半是内核有问题,实在不行的话就拿SDK里的内核吧,放在一齐就行了。
以后如果需要修改代码重新生成 system.img,就直接重新编译然后重启模拟器就可以了(最好使用ccache).