由于使用Google Arm system image模拟器时启动速度比较慢,不利于测试,原因大致是因为虚拟Arm底层造成的。替代方法可以使用速度较快的Genymotion模拟器,但是Genymotion是付费软件,而免费版本有使用限制。所以考虑加速Google模拟器。Google x86 system image 模拟器提供HAXM加速方法,对模拟器进行加速。但是较早版本API使用x86 system image的模拟器不支持Google API,以致于不能使用地图定位等功能,如小于Android 4.4.2-API Level 19的版本。所以需要从含有Google 的地图 API的模拟器抽取API,然后放进没有Google API的模拟器。这里以API Level 18--Android 4.3为例,使用adb将配置为Arm API Level 18的模拟器抽取Google 地图API,放进配置为Intel(Atom)x86 Android4.3的模拟器。
操作步骤
1 分别创建模拟器配置为 Arm API Level 18 和 Intel(Atom)x86 Android4.3的模拟器。
2 emulator -avd name_of_avd 启动含有GoogleAPI的模拟器
3 adb pull /system/etc/permissions/com.google.android.maps.xml 抽取所需要的文件
4 adb pull /system/framework/com.google.android.maps.jar
5 关闭第一个模拟器
6 emulator -avd name_of_avd 启动没有GoogleAPI的模拟器
7 adb remount rw 调整权限,使具有写权限
8 adb push com.google.android.maps.xml /system/etc/permissions 将相应文件放进目标模拟器
9 adb push com.google.android.maps.jar /system/framework
10 adb push mkfs.yaffs2.x86 /data 将工具放进目标模拟器
11 adb shell
12 cd /data
13chmod 777 mkfs.yaffs2.x86
14 ./mkfs.yaffs2.x86 /system system.img 使用工具格式镜像
15 exit 退出shell
16 adb pull /data/system.img 将镜像拷出,需要花费较长时间,我测试时的文件大概有三百M
17 拷贝system.img 到存放目标模拟器的目录下,如: .android/avd/targetemulator.avd
18 重启目标模拟器
参照:
http://stackoverflow.com/questions/9857325/google-maps-sdk-with-new-intel-atom-x86-emulator
http://38911bytes.blogspot.de/2012/03/how-to-use-google-maps-api-in-android.html
http://code.google.com/p/android-group-korea/downloads/detail?name=mkfs.yaffs2.x86
http://www.developer.com/ws/android/development-tools/haxm-speeds-up-the-android-emulator.html