Commit 4908210b authored by Administrator's avatar Administrator

个大图商坐标系转换

parent b27b4934
...@@ -8,8 +8,8 @@ android { ...@@ -8,8 +8,8 @@ android {
applicationId "com.virjar.ratel.virtuallocation" applicationId "com.virjar.ratel.virtuallocation"
minSdkVersion 19 minSdkVersion 19
targetSdkVersion 28 targetSdkVersion 28
versionCode 20210420 versionCode 20210421
versionName "v1.3" versionName "v1.4"
archivesBaseName = "JDY_${versionName}".replace(' ', '_') archivesBaseName = "JDY_${versionName}".replace(' ', '_')
ndk { ndk {
abiFilters "armeabi-v7a", "arm64-v8a"//, "x86","arm64-v8a","x86_64" abiFilters "armeabi-v7a", "arm64-v8a"//, "x86","arm64-v8a","x86_64"
......
...@@ -36,6 +36,7 @@ import top.littlerich.virtuallocation.common.AppApplication; ...@@ -36,6 +36,7 @@ import top.littlerich.virtuallocation.common.AppApplication;
public class XPosedPlugin implements IRposedHookLoadPackage { public class XPosedPlugin implements IRposedHookLoadPackage {
private static final String TAG = AppApplication.tag; private static final String TAG = AppApplication.tag;
private static boolean hasMapApi = false;
@Override @Override
public void handleLoadPackage(RC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { public void handleLoadPackage(RC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
...@@ -76,8 +77,15 @@ public class XPosedPlugin implements IRposedHookLoadPackage { ...@@ -76,8 +77,15 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
LocationListener fakeLocationListener = new LocationListener() { LocationListener fakeLocationListener = new LocationListener() {
@Override @Override
public void onLocationChanged(Location location) { public void onLocationChanged(Location location) {
location.setLatitude(AppApplication.mockGPS.mLatitude); if (!hasMapApi) {
location.setLongitude(AppApplication.mockGPS.mLongitude); double x = AppApplication.mockGPS.mLongitude - 0.0065, y = AppApplication.mockGPS.mLatitude - 0.0035;
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * Math.PI);
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI);
double tempLng = z * Math.cos(theta);
double tempLat = z * Math.sin(theta);
location.setLatitude(tempLat);
location.setLongitude(tempLng);
}
} }
@Override @Override
...@@ -112,8 +120,15 @@ public class XPosedPlugin implements IRposedHookLoadPackage { ...@@ -112,8 +120,15 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
if (location == null) { if (location == null) {
return; return;
} }
location.setLatitude(AppApplication.mockGPS.mLatitude); if (!hasMapApi) {
location.setLongitude(AppApplication.mockGPS.mLongitude); double x = AppApplication.mockGPS.mLongitude - 0.0065, y = AppApplication.mockGPS.mLatitude - 0.0035;
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * Math.PI);
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI);
double tempLng = z * Math.cos(theta);
double tempLat = z * Math.sin(theta);
location.setLatitude(tempLat);
location.setLongitude(tempLng);
}
} }
}); });
} }
...@@ -128,6 +143,7 @@ public class XPosedPlugin implements IRposedHookLoadPackage { ...@@ -128,6 +143,7 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
@Override @Override
public void onClassLoad(final Class<?> clazz) { public void onClassLoad(final Class<?> clazz) {
Log.i(AppApplication.tag, "命中腾讯API:" + clazz); Log.i(AppApplication.tag, "命中腾讯API:" + clazz);
hasMapApi = true;
// public final int requestLocationUpdates(TencentLocationRequest var1, TencentLocationListener var2) { // public final int requestLocationUpdates(TencentLocationRequest var1, TencentLocationListener var2) {
// public final int requestLocationUpdates(TencentLocationRequest var1, TencentLocationListener var2, Looper var3) { // public final int requestLocationUpdates(TencentLocationRequest var1, TencentLocationListener var2, Looper var3) {
//public final int requestSingleFreshLocation(TencentLocationRequest var1, TencentLocationListener var2, Looper var3) { //public final int requestSingleFreshLocation(TencentLocationRequest var1, TencentLocationListener var2, Looper var3) {
...@@ -263,6 +279,7 @@ public class XPosedPlugin implements IRposedHookLoadPackage { ...@@ -263,6 +279,7 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
@Override @Override
public void onClassLoad(Class<?> clazz) { public void onClassLoad(Class<?> clazz) {
Log.i(AppApplication.tag, "命中百度API:" + clazz); Log.i(AppApplication.tag, "命中百度API:" + clazz);
hasMapApi = true;
RposedBridge.hookAllMethods(clazz, "registerLocationListener", new RC_MethodHook() { RposedBridge.hookAllMethods(clazz, "registerLocationListener", new RC_MethodHook() {
@Override @Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable { protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
...@@ -326,7 +343,7 @@ public class XPosedPlugin implements IRposedHookLoadPackage { ...@@ -326,7 +343,7 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
@Override @Override
public void onClassLoad(Class<?> clazz) { public void onClassLoad(Class<?> clazz) {
Log.i(AppApplication.tag, "命中高德API:" + clazz); Log.i(AppApplication.tag, "命中高德API:" + clazz);
hasMapApi = true;
RposedHelpers.findAndHookMethod(clazz, "setLocationListener", RposedHelpers.findAndHookMethod(clazz, "setLocationListener",
"com.amap.api.location.AMapLocationListener", "com.amap.api.location.AMapLocationListener",
new RC_MethodHook() { new RC_MethodHook() {
...@@ -361,9 +378,16 @@ public class XPosedPlugin implements IRposedHookLoadPackage { ...@@ -361,9 +378,16 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
continue; continue;
} }
// 我们是百度坐标系,这里是高德,所以进行一次坐标系转换
Location location = (Location) obj; Location location = (Location) obj;
location.setLatitude(AppApplication.mockGPS.mLatitude); double x = AppApplication.mockGPS.mLongitude - 0.0065, y = AppApplication.mockGPS.mLatitude - 0.0035;
location.setLongitude(AppApplication.mockGPS.mLongitude); double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * Math.PI);
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI);
double tempLng = z * Math.cos(theta);
double tempLat = z * Math.sin(theta);
location.setLatitude(tempLat);
location.setLongitude(tempLng);
// public void setAddress(String var1) { // public void setAddress(String var1) {
try { try {
......
...@@ -19,6 +19,7 @@ import org.json.JSONObject; ...@@ -19,6 +19,7 @@ import org.json.JSONObject;
import java.io.File; import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.Random;
import top.littlerich.virtuallocation.model.Gps; import top.littlerich.virtuallocation.model.Gps;
import top.littlerich.virtuallocation.service.LocationService; import top.littlerich.virtuallocation.service.LocationService;
...@@ -150,6 +151,9 @@ public class AppApplication extends Application { ...@@ -150,6 +151,9 @@ public class AppApplication extends Application {
if (lat == -1 && lng == -1) { if (lat == -1 && lng == -1) {
return; return;
} }
Random random = new Random();
lat += (random.nextDouble() - 0.5) * 0.0012;
lng += (random.nextDouble() - 0.5) * 0.001;
mockGPS = new Gps(lat, lng, address); mockGPS = new Gps(lat, lng, address);
} catch (Exception e) { } catch (Exception e) {
Log.e(AppApplication.tag, "error for queryMockGPS", e); Log.e(AppApplication.tag, "error for queryMockGPS", e);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment