V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cheneydog
V2EX  ›  Android

2025 年了,微信小程序虚拟定位用什么模块?

  •  
  •   cheneydog · 4 天前 · 1250 次点击
    公司换了打卡程序了,LSposed 已装好,找不到合适的模块。
    3 条回复    2025-01-14 18:50:34 +08:00
    hadesy
        1
    hadesy  
       4 天前   ❤️ 1
    private static void HookLocation(ClassLoader classLoader) throws ClassNotFoundException {
    //坐标拾取系统 https://lbs.qq.com/getPoint/
    double latitude = 0.0;
    double longitude = 0.0;

    Class clazz = classLoader.loadClass(
    "com.tencent.map.geolocation.sapp.TencentLocationManager");
    XposedHelpers.findAndHookMethod(clazz, "requestLocationUpdates",
    "com.tencent.map.geolocation.sapp.TencentLocationRequest",
    "com.tencent.map.geolocation.sapp.TencentLocationListener", new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
    XposedBridge.log("requestLocationUpdates");
    Class tencentLocationListenerClass = param.args[1].getClass();
    XposedHelpers.findAndHookMethod(tencentLocationListenerClass,
    "onLocationChanged",
    "com.tencent.map.geolocation.sapp.TencentLocation",
    int.class, String.class, new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
    Class tencentLocation = param.args[0].getClass();
    XposedHelpers.findAndHookMethod(tencentLocation,
    "getLatitude",
    new XC_MethodHook() {
    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
    XposedBridge.log("requestLocationUpdates.getLatitude:"+ param.getResult());
    param.setResult(latitude);
    }
    });
    XposedHelpers.findAndHookMethod(tencentLocation,
    "getLongitude",
    new XC_MethodHook() {
    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
    XposedBridge.log("requestLocationUpdates.getLongitude:"+ param.getResult());
    param.setResult(longitude);
    }
    });


    }
    });
    }
    }
    );
    }
    hahiru
        2
    hahiru  
       4 天前
    运动模拟器+Websocket 插件
    liyafe1997
        3
    liyafe1997  
       3 天前
    安卓上可能没有好的虚拟定位方案,因为现在很多定位是基于 WIFI 蓝牙的,甚至这个优先级比 GPS 高(也就是如果两者位置偏差大的话,优先信基于网络的定位)。因为 GPS 好模拟,网络位置真不好模拟,你没有特定坐标下的 WIFI 蓝牙 MAC 地址列表和基站信息。除非你跑去那个地方,抓一个回来。

    可以尝试用 Fake Location ,这个原理似乎是屏蔽掉基于网络的位置(返回空 WIFI/蓝牙列表给 APP ),然后模拟 GPS 位置。但是在有的 App 比如支付宝上不管用,支付宝只会尝试使用网络定位,压根不管 GPS 的位置。如果它无法获取 WIFI/蓝牙列表和基站信息,那就直接显示定位失败。

    之前尝试给支付宝搞虚拟定位(主要是因为在海外,支付宝没法用收款码,当时刷私人收款码花呗还能套现),拿安卓机折腾了半天都不行,就是上面的原因。最后拿 iPhone 搞定了。

    iPhone 虚拟定位非常非常简单,用爱思助手这类软件就能做到(有 API 能通过 USB 虚拟定位,应该主要是给开发者的),然后因为 iOS 没有给 App 扫描 WIFI 的 API ,所以就算网络定位,也只能通过苹果的服务进行,App 只能调系统 API 来实现定位,听系统的。于是这类虚拟定位只要 Hook 了系统 API ,对 App 来说理论上就是透明的。

    综上所述,试试拿 iOS 搞。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2717 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 05:12 · PVG 13:12 · LAX 21:12 · JFK 00:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.