用于在虚拟框中运行的android的假gps

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)

现在,理想情况下,我希望我的应用程序(如adbddms)在Windows中运行,用户可以在其中为gps设备设置一些坐标值(在没有实际GPS的情况下,否则虚拟现有GPS).这些坐标可供Android应用程序使用.基本上,这与通过virtual-box运行android镜像提供现有Android模拟器(使用ddms)的功能相同.

我没有运行Android模拟器,我没有使用eclipse.:( [更新结束]

谢谢,维克拉姆.

Vik*_*exe 6

这就是我的做法(以及android堆栈(在vbox上运行)如何工作的简要概述).

具有GPS功能的Android应用程序使用JNI接口(如导出的frameworks/base/core/jni/android_location_GpsLocationProvider.cpp)在用户模式共享库(通常为libgps.so或libhardware_legacy.so)的底层实现中注册一些回调

这些注册的回调负责通知应用程序的GPS修复(或更改gps位置).

这是一个简单的图像,展示了来自的呼叫流程 Android -> VBox -> Windows

在此输入图像描述

现在要完成此流程,需要执行以下步骤:

  1. 我创建了自己的libgps.so导出函数gps_get_interface(声明gps.h),由JNI接口使用.支持gps的应用程序获取从此libgps.so返回的最新坐标,该坐标实际上由GpsLocationProvider服务动态加载.

  2. 使用Vbox标头创建另一个共享对象,并包含连接,断开连接和发送功能请求的例程,以便host service在主机操作系统中运行.这些是带有预定义ioctl-numbers的简单ioctl调用(例如:VBOX_GUEST_IOCTL_HGCM_CONNECT等).

  3. 创建一个主机服务(实际上是一个DLL,由其加载VBox Host Service),可以处理从HGCM调用传递的参数,并以步骤2中创建的共享对象理解的格式返回所需的数据.

  4. 现在将任何假/虚拟位置发送回内部运行的应用程序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调用.