Skip to content

Commit

Permalink
v1.04
Browse files Browse the repository at this point in the history
修改了实现方式;升级了gradle版本;
  • Loading branch information
wuxiaosu committed May 22, 2018
1 parent 9b9a3cf commit 7e81caa
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 73 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ Xposed 钉钉辅助模块,暂时实现模拟位置。
## 下载
- release from [github](https://github.com/wuxiaosu/XposedRimetHelper/releases)
- release from [酷安](https://www.coolapk.com/apk/180336)
## v1.04
修改了实现方式,理论上支持 4.2.0 以上所有版本
实测已支持:"4.2.0", "4.2.1", "4.2.6", "4.2.8", "4.3.0", "4.3.1", "4.3.2", "4.3.3", "4.3.5", "4.3.7"
## v1.03
更新支持 4.3.5
## v1.02
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.android.tools.build:gradle:3.1.2'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down
14 changes: 7 additions & 7 deletions rimethelper/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ android {
applicationId "com.wuxiaosu.rimethelper"
minSdkVersion 21
targetSdkVersion 23
versionCode 4
versionName "1.03"
versionCode 5
versionName "1.04"
}

signingConfigs {
Expand Down Expand Up @@ -42,7 +42,7 @@ android {
}

debug {
minifyEnabled true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

manifestPlaceholders = [
Expand All @@ -58,9 +58,9 @@ dependencies {
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:design:26.1.0'
implementation 'com.android.support:support-v4:26.1.0'
compile 'com.jaeger.statusbarutil:library:1.4.0'
provided 'de.robv.android.xposed:api:82'
implementation 'com.jaeger.statusbarutil:library:1.4.0'
compileOnly 'de.robv.android.xposed:api:82'
implementation 'com.github.wuxiaosu:SettingLabelView:1.0@aar'
compile project(':amaplitelib')
compile 'com.github.arimorty:floatingsearchview:2.1.1'
implementation project(':amaplitelib')
implementation 'com.github.arimorty:floatingsearchview:2.1.1'
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public class MainActivity extends BaseActivity {
private EditText mEtLocationStartTime;

private final String[] supportVersions =
new String[]{"4.2.0", "4.2.1", "4.2.6", "4.2.8", "4.3.0", "4.3.1", "4.3.2", "4.3.3", "4.3.5"};
new String[]{"4.2.0", "4.2.1", "4.2.6", "4.2.8", "4.3.0", "4.3.1", "4.3.2", "4.3.3", "4.3.5", "4.3.7"};

@Override
protected void onCreate(Bundle savedInstanceState) {
Expand Down Expand Up @@ -171,7 +171,7 @@ public void onClick(View v) {
});
mTvVersionName.setText(getString(R.string.app_name) + " v" + BuildConfig.VERSION_NAME);
mTvInfo.setText(getString(R.string.app_description)
+ ",当前版本已支持\n钉钉:"
+ ",理论上支持钉钉4.2.0以上所有版本,当前版本实测支持以下版本\n钉钉:"
+ Arrays.toString(supportVersions)
+ "\n更多详情:");
AlertDialog alertDialog = new AlertDialog.Builder(this)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.wuxiaosu.rimethelper.BuildConfig;
import com.wuxiaosu.widget.SettingLabelView;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
Expand All @@ -27,57 +29,51 @@ public class LocationHook {
private String latitude;
private String longitude;

private String webClazzName;
private String otherClazzName;

public LocationHook(String versionName) {
xsp = new XSharedPreferences(BuildConfig.APPLICATION_ID, SettingLabelView.DEFAULT_PREFERENCES_NAME);
xsp.makeWorldReadable();
switch (versionName) {
case "4.2.0":
webClazzName = "fym";
otherClazzName = "bhl";
break;
case "4.2.1":
webClazzName = "fyn";
otherClazzName = "bhl";
break;
case "4.2.6":
webClazzName = "gif";
otherClazzName = "bjp";
break;
case "4.2.8":
webClazzName = "gnv";
otherClazzName = "blt";
break;
case "4.3.0":
webClazzName = "gxq";
otherClazzName = "brm";
break;
case "4.3.1":
webClazzName = "gxt";
otherClazzName = "brm";
break;
case "4.3.2":
webClazzName = "gzd";
otherClazzName = "bsg";
break;
case "4.3.3":
webClazzName = "gzm";
otherClazzName = "bsg";
break;
default:
case "4.3.5":
webClazzName = "hgp";
otherClazzName = "bty";
break;
}

public void hook(final ClassLoader classLoader) {
try {
final Class aMapLocationClientClazz =
XposedHelpers.findClass("com.amap.api.location.AMapLocationClient", classLoader);
XposedBridge.hookAllConstructors(aMapLocationClientClazz, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Field[] fields = aMapLocationClientClazz.getDeclaredFields();
for (Field field : fields) {
Object object = XposedHelpers.getObjectField(param.thisObject, field.getName());
if (object != null &&
!(object.getClass().getName()).equals("com.alibaba.android.rimet.LauncherApplication")) {
Class locationManagerClazz =
XposedHelpers.findClass(object.getClass().getName(), classLoader);
hookLocationManager(locationManagerClazz);
}
}
super.afterHookedMethod(param);
}
});
} catch (Error | Exception e) {
XposedBridge.log(e);
}
}

public void hook(ClassLoader classLoader) {
private void reload() {
xsp.reload();
fakeLocation = xsp.getBoolean("fake_location", false);
fakeLocationTime = xsp.getBoolean("fake_location_time", false);
startTime = xsp.getString("location_start_time", "8:40");
latitude = xsp.getString("latitude", "39.908692");
longitude = xsp.getString("longitude", "116.397477");
}


private void hookLocationManager(Class locationManagerClazz) {
try {
Class webClazz = XposedHelpers.findClass(webClazzName, classLoader);
XposedBridge.hookAllMethods(webClazz, "setLocationListener", new XC_MethodHook() {
//chat location
XposedBridge.hookAllMethods(locationManagerClazz, "setLocationListener", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Class listenerClazz = param.args[0].getClass();
Expand All @@ -91,30 +87,26 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}
});

Class otherClazz = XposedHelpers.findClass(otherClazzName, classLoader);
XposedBridge.hookAllMethods(otherClazz, "onLocationChanged", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
param.args[0] = fakeAMapLocationObject(param.args[0]);
super.beforeHookedMethod(param);
//web location
Method[] methods = locationManagerClazz.getMethods();
for (Method method : methods) {
Class[] classes = method.getParameterTypes();
if (classes.length == 1 && classes[0].getName().equals("com.amap.api.location.AMapLocation")) {
XposedBridge.hookMethod(method, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
param.args[0] = fakeAMapLocationObject(param.args[0]);
super.beforeHookedMethod(param);
}
});
break;
}
});

} catch (Error | Exception e) {
}
} catch (Throwable e) {
XposedBridge.log(e);
}
}

private void reload() {
xsp.reload();
fakeLocation = xsp.getBoolean("fake_location", false);
fakeLocationTime = xsp.getBoolean("fake_location_time", false);
startTime = xsp.getString("location_start_time", "8:40");
latitude = xsp.getString("latitude", "39.908692");
longitude = xsp.getString("longitude", "116.397477");
}

private Object fakeAMapLocationObject(Object object) {
reload();
if (fakeLocation) {
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
@@ -1 +1 @@
include ':rimethelper', ':amaplitelib'
include ':rimethelper', ':amaplitelib', ':SettingLabelView'

0 comments on commit 7e81caa

Please sign in to comment.