在虚拟盒中运行的Android假gps

| 我正在尝试在virtual-box中运行的android中虚拟化GPS设备。我想促进一个在android中运行的应用使用gps设备或以某种方式获得假gps位置。我已经开始研究android模拟器的源代码,但是与此同时,任何人都可以从任何好的地方开始。 [更新] 为了更清楚一点,整个应用程序堆栈如下所示:
Android app (with gps functionality) to be tested ----> (developed by end user)

Android virtual machine ----> (Guest OS)

virtual box ----> 

Microsoft Windows ---> Host OS 
现在,理想情况下,我想让我的应用程序(例如
adb
ddms
)在Windows中运行,用户可以从中为gps设备设置一些坐标值(在没有实际GPS的情况下,对现有GPS进行虚拟化)。这些坐标将可用于android应用。基本上,这与通过运行Android映像的ѭ3providing提供现有android仿真器的功能(使用ddms)相同。 我没有运行android模拟器,也没有使用eclipse。 :( [更新结束] 谢谢, 维克拉姆     
已邀请:
这就是我的方法(以及android堆栈(在vbox上运行)的工作原理的简要概述)。 具有GPS功能的Android应用使用JNI接口(在
frameworks/base/core/jni/android_location_GpsLocationProvider.cpp
中导出)向用户模式共享lib(通常为libgps.so或libhardware_legacy.so)的底层实现注册一些回调。 这些注册的回调负责向应用程序通知GPS修复(或GPS位置更改)。 这是一个简单的图像,显​​示了来自ѭ5的呼叫流程 现在完成此流程,需要执行以下步骤: 我创建了自己的
libgps.so
,导出了功能
gps_get_interface
(在
gps.h
中声明),该功能由JNI接口使用。具有gps支持的应用会从此libgps.so返回最新的坐标,该坐标实际上是由GpsLocationProvider服务动态加载的。 使用Vbox标头创建另一个共享对象,并包含例程以连接,断开连接并将功能请求发送到在主机OS中运行的“ 9”。这些是具有预定义ioctl编号的简单ioctl调用(例如:VBOX_GUEST_IOCTL_HGCM_CONNECT等)。 创建一个主机服务(实际上是一个由
VBox Host Service
加载的DLL),它可以处理从HGCM调用传递的参数,并以步骤2中创建的共享库可以理解的格式返回所需的数据。 现在要将假的/假的位置发送回运行在
Android VM
中的应用程序,您只需要通知
host service
,其余的信息便传回
VBox Additions
->
libgps.so
->
GpsLocationProvider service
->,最后是to16ѭ。 希望这将有助于某人尝试类似的事情或帮助某人了解android stack的工作方式。 注意:编译hgcm代码并将其与android lib链接也有点复杂,因为android libc(以及其他一些lib)实现的功能数量有限。为了避免所有这些,您可以直接打开设备(/ dev / vboxguest)并以vbox和主机服务已知的格式在设备上发出ioctl调用。     
尝试使用
setTestProviderLocation
使用模拟位置如何?     
你在食吗?如果是这样,请使用ddms将模拟位置发送到虚拟设备。     
如果您使用的是eclipse,请转到DDMS透视图,然后转到“模拟器控制”部分。在那里,您会看到2个用于输入经度和纬度的文本框。然后,单击发送,该信息将发送到仿真器。 另外,您可以通过GPS信息远程登录到仿真器: 例 telnet本地主机5554 地理位置修复-82.411629 28.054553 http://www.devx.com/wireless/Article/39239/1954     

要回复问题请先登录注册