1.源码
使用的方法是以咕咚为跳板,先修改咕咚的计步数据然后上传微信。
其中:
l 使用的手机是 小米3+miui8首先要满足xposed可以运行的条件,其次系统一定要是android6.0+,原因会在后面详细说明
l 里面带了一些调试输出,用于查看过程中传感器数据的变化不需要的话可以把log.e全部删掉
l sensor.getName().equals("Step Counter")会由于权限问题报错eclipse代码左侧提示小图标点一下无视就好
package com.example.testxposedhook;
import static de.robv.android.xposed.XposedHelpers.findClass;
import java.lang.reflect.Field;
import android.hardware.Sensor;
import android.util.Log;
import android.util.SparseArray;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class Main implements IXposedHookLoadPackage {
private static int stepCount = 23333;//must lower than 98800
private static int acclCount = 1;//accelerate sensor count
@Override
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
// TODO Auto-generated method stub
if(!lpparam.packageName.equals("com.codoon.gps")){
return;
}
final Class<?> sensorEL = findClass("android.hardware.SystemSensorManager$SensorEventQueue", lpparam.classLoader);
XposedBridge.hookAllMethods(sensorEL, "dispatchSensorEvent", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
// ((float[]) param.args[1])[0] = ((float[]) param.args[1])[0] + 1168 * stepCount;
// stepCount++;
try{
//先拿manager
Field mfield = param.thisObject.getClass().getSuperclass().getDeclaredField("mManager");
mfield.setAccessible(true);
Object mManager= mfield.get(param.thisObject);
//再拿mmanage