Vik*_*exe 4 virtualization gps android vbox
我试图虚拟化在虚拟机中运行的android中的GPS设备.我想方便在Android中运行的应用程序使用gps设备或获取假gps位置一些如何.我已经开始查看android模拟器源代码,但同时,任何人都有任何好的开始.
[UPDATE]
为了使它更清楚,整个应用程序堆栈将是这样的事情:
Android app (with gps functionality) to be tested ----> (developed by end user)
Android virtual machine ----> (Guest OS)
virtual box ---->
Microsoft Windows ---> Host OS
Run Code Online (Sandbox Code Playgroud)
现在,理想情况下,我希望我的应用程序(如adb或ddms)在Windows中运行,用户可以在其中为gps设备设置一些坐标值(在没有实际GPS的情况下,否则虚拟现有GPS).这些坐标可供Android应用程序使用.基本上,这与通过virtual-box运行android镜像提供现有Android模拟器(使用ddms)的功能相同.
我没有运行Android模拟器,我没有使用eclipse.:( [更新结束]
谢谢,维克拉姆.
这就是我的做法(以及android堆栈(在vbox上运行)如何工作的简要概述).
具有GPS功能的Android应用程序使用JNI接口(如导出的frameworks/base/core/jni/android_location_GpsLocationProvider.cpp)在用户模式共享库(通常为libgps.so或libhardware_legacy.so)的底层实现中注册一些回调
这些注册的回调负责通知应用程序的GPS修复(或更改gps位置).
这是一个简单的图像,展示了来自的呼叫流程 Android -> VBox -> Windows

现在要完成此流程,需要执行以下步骤:
我创建了自己的libgps.so导出函数gps_get_interface(声明gps.h),由JNI接口使用.支持gps的应用程序获取从此libgps.so返回的最新坐标,该坐标实际上由GpsLocationProvider服务动态加载.
使用Vbox标头创建另一个共享对象,并包含连接,断开连接和发送功能请求的例程,以便host service在主机操作系统中运行.这些是带有预定义ioctl-numbers的简单ioctl调用(例如:VBOX_GUEST_IOCTL_HGCM_CONNECT等).
创建一个主机服务(实际上是一个DLL,由其加载VBox Host Service),可以处理从HGCM调用传递的参数,并以步骤2中创建的共享对象理解的格式返回所需的数据.
现在将任何假/虚拟位置发送回内部运行的应用程序Android VM,您只需要通知host service,然后将其余内容传回VBox Additions- > libgps.so- > GpsLocationProvider service- >,最后发送到App with GPS Support.
希望这会帮助一些人尝试类似的东西或帮助一些人了解android堆栈如何工作.
注意:编译hgcm代码并将其与android lib链接也有点复杂,因为android libc(以及其他一些libs)中实现的函数数量有限.要避免这一切,您可以直接打开设备(/ dev/vboxguest)并以vbox和您的主机服务已知的格式对其发出ioctl调用.