【问题标题】:Permission ACCESS_MOCK_LOCATION is ignored?权限 ACCESS_MOCK_LOCATION 被忽略?
【发布时间】:2024-01-13 05:38:01
【问题描述】:

我没有进行广泛的测试,但有证据表明应用程序清单中的 android.permission.ACCESS_MOCK_LOCATION 不像人们假设的那样工作(即如果存在 - 允许模拟位置提供程序,否则不)。因此,像https://play.google.com/store/apps/details?id=com.lexa.fakegps 这样的虚假 GPS 应用程序可以与任何应用程序一起使用,无论它是否设置了 ACCESS_MOCK_LOCATION。如果用户在设备设置中允许虚假位置似乎就足够了。

也许 ACCESS_MOCK_LOCATION 真的意味着应用程序本身可以是模拟位置提供者?如果是这样,那么它应该更像 WRITE_MOCK_LOCATION 读取,而不是顾名思义的访问(读取)。听起来更像是错误而不是功能。如果这是真的,那么没有办法真正确保 GPS 位置是真实的,而不是假的?

【问题讨论】:

  • 请检查我的回答。
  • 谢谢,但您并没有真正回答我的问题。我担心的是,一些第 3 方应用程序可以在非 root 设备上轻松伪造 GPS 位置,而我使用 GPS 的应用程序对此并不安全。我的应用程序是安全应用程序,如果任何最终用户可以用它伪造任何 GPS 位置,它的用处就会大大降低。有办法解决吗?

标签: android geolocation gps


【解决方案1】:

http://developer.android.com/reference/android/Manifest.permission.html 中,写着Allows an application to create mock location providers for testing,所以我认为你的想法是对的。

事实上,com.lexa.fakegps 可以在没有ACCESS_MOCK_LOCATION 的情况下模拟位置,前提是它具有 root 权限。此外,即使它具有 root 权限,它也需要将 Allow mock locations 切换到模拟位置。所以,我认为权限是针对普通应用程序而不是系统应用程序的。系统应用无需在AndroidManifest.xml中声明权限即可拥有更多权限。

【讨论】:

    【解决方案2】:

    由于没有人真正回答你的问题,我将提供一个答案:

    也许 ACCESS_MOCK_LOCATION 真的意味着应用程序可以 自己模拟位置提供者?

    是的。该权限允许应用“访问”“模拟位置”开发人员功能。这允许开发人员创建看似真实的模拟位置,以便开发/测试具有基于位置的功能的应用程序,而无需实际移动或更改(例如硬连接假 GPS)设备。

    因为 Google 不知道您要测试什么应用,也不知道您希望如何提供虚假数据,所以它这样做了。作为开发人员功能,它减少了此功能对一般人群的曝光。

    【讨论】:

    • 谢谢,明确答复。所以这只是混淆权限名称。你知道我的问题的另一部分 - 我的应用程序如何确保它始终使用真实而不是模拟位置?
    • 是否有意图去请求许可?其他应用能否检测到当前位置被欺骗?而且,我在哪里可以找到如何进行欺骗?
    【解决方案3】:

    您首先需要启用开发者模式,在 Android 4.2.1 中,通过转到 Settings -> About Tablet(靠近底部;可能对手机调用类似的名称)并点击底部的 Build number 来完成, 七次。开始点击后会出现倒计时,向您显示成为开发者还需要多少时间。

    点击返回按钮返回Settings,现在您将在您所在的“关于”菜单上方找到Developer options 项目 - 单击它,然后在DEBUGGING 下检查Allow mock locations。您的设备现在应该正确地尊重ACCESS_MOCK_LOCATION

    (如果您这样做的动机是让 Ingress 相信您在某个门户附近,那么您就很不走运了 - 当然,任何应用程序都能够检测到此设置已被启用并告诉您禁用它,所以你最多可以用它来补充你的 XM 供应。:-)

    【讨论】:

    • -1 因为这不是答案,PageNotFound 有有效的答案。
    • 是否有去那里请求许可的意图?其他应用能否检测到当前位置被欺骗?而且,我在哪里可以找到如何进行欺骗?
    【解决方案4】:

    禁用该特定权限的 MockLocation lint 检查,即

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">
        <uses-permission
            android:name="android.permission.ACCESS_MOCK_LOCATION"
            tools:ignore="MockLocation" />  
    </manifest>
    

    【讨论】: