【问题标题】:fake gps for android running in virtual-box在虚拟盒中运行的 android 的假 gps
【发布时间】:2011-05-06 16:19:11
【问题描述】:

我正在尝试在虚拟盒中运行的 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 

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

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

【问题讨论】:

    标签: android gps virtualbox virtualization


    【解决方案1】:

    这就是我的做法(以及 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 编号的简单 ioctl 调用(例如:VBOX_GUEST_IOCTL_HGCM_CONNECT 等)。

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

    4. 1234563 > GpsLocationProvider service -> 最后是App with GPS Support

    希望这将帮助一些人尝试类似的事情或帮助一些人了解 android 堆栈的工作原理。

    注意:编译 hgcm 代码并将其与 android lib 链接也有点复杂,因为 android libc(以及其他一些 lib)中实现的函数数量有限。为避免这一切,您可以直接打开设备 (/dev/vboxguest) 并以 vbox 和主机服务已知的格式对其发出 ioctl 调用。

    【讨论】:

      【解决方案2】:

      尝试使用 setTestProviderLocation? 模拟位置怎么样

      【讨论】:

        【解决方案3】:

        你在日食吗?如果是这样,请使用 ddms 将模拟位置发送到虚拟设备。

        【讨论】:

          【解决方案4】:

          如果您使用的是 Eclipse,请转到 DDMS perpective,然后转到 Emulator Control 部分。在那里,您将看到 2 个纬度和经度文本框。然后点击发送,该信息将发送到模拟器。

          或者,您可以通过 telnet 进入模拟器并传递 GPS 信息: 例子 远程登录本地主机 5554 地理修复 -82.411629 28.054553

          http://www.devx.com/wireless/Article/39239/1954

          【讨论】:

          • 那肯定行得通,但我这里没有运行 android 模拟器。我想通过 virtual-box 向 android 应用程序通知同样的事情。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-28
          • 1970-01-01
          • 2012-09-24
          • 2014-02-22
          • 1970-01-01
          • 1970-01-01
          • 2012-01-27
          相关资源
          最近更新 更多