package mobi.acpm.inspeckage.hooks; import android.app.Activity; import android.os.Bundle; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonSyntaxException; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XSharedPreferences; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; import mobi.acpm.inspeckage.Module; import mobi.acpm.inspeckage.hooks.entities.BuildItem; import mobi.acpm.inspeckage.hooks.entities.BuildList; import static de.robv.android.xposed.XposedHelpers.findAndHookMethod; /** * Created by acpm on 19/04/17. */ public class BuildHook extends XC_MethodHook { public static final String TAG = "Inspeckage_DeviceData: "; private static XSharedPreferences sPrefs; private static Gson gson = new GsonBuilder().disableHtmlEscaping().create(); public static void loadPrefs() { sPrefs = new XSharedPreferences(Module.class.getPackage().getName(), Module.PREFS); sPrefs.makeWorldReadable(); } public static void initAllHooks(final XC_LoadPackage.LoadPackageParam loadPackageParam) { loadPrefs(); try{ findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { loadPrefs(); String json = sPrefs.getString("build_hooks", ""); Class<?> classBuild = XposedHelpers.findClass("android.os.Build", loadPackageParam.classLoader); Class<?> classBuildVersion = XposedHelpers.findClass("android.os.Build.VERSION", loadPackageParam.classLoader); try { BuildList buildList = gson.fromJson(json, BuildList.class); for (BuildItem buildItem : buildList.buildItems) { if (buildItem.enable) { if (buildItem.type.equals("BUILD")) { XposedHelpers.setStaticObjectField(classBuild, buildItem.name, buildItem.newValue); } else { XposedHelpers.setStaticObjectField(classBuildVersion, buildItem.name, buildItem.newValue); } } } } catch (JsonSyntaxException ex) { ex.printStackTrace(); } } }); }catch (NoSuchMethodError e) { XposedBridge.log(TAG + "couldn't hook method"); } } }