Skip to content

Commit dd4a89a

Browse files
authored
fix: GmsDozeFix & ThermalBrightness (#1314)
优化 GMS 保持联网,同时适配 Android 16 修复禁止自动降低亮度,同时适配 Android 16
1 parent b3d4d60 commit dd4a89a

4 files changed

Lines changed: 95 additions & 51 deletions

File tree

library/hook/src/main/java/com/sevtinge/hyperceiler/hook/module/app/SystemFramework/Pad/SystemFrameworkB.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import com.hchen.database.HookBase;
2222
import com.sevtinge.hyperceiler.hook.module.base.BaseModule;
2323
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.DisableMiuiWatermark;
24+
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.DisableThermal;
2425
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.FlagSecure;
26+
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.ThermalBrightness;
2527
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.corepatch.AllowUpdateSystemApp;
2628
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.corepatch.BypassIsolationViolation;
2729
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.corepatch.BypassSignCheckForT;
@@ -41,6 +43,8 @@ public void handleLoadPackage() {
4143
initHook(new FlagSecure(), mPrefsMap.getBoolean("system_other_flag_secure"));
4244

4345
// 其它-底层
46+
initHook(DisableThermal.INSTANCE, mPrefsMap.getBoolean("system_framework_other_disable_thermal"));
47+
initHook(new ThermalBrightness(), mPrefsMap.getBoolean("system_framework_other_thermal_brightness"));
4448
initHook(new DisableMiuiWatermark(), mPrefsMap.getBoolean("system_framework_disable_miui_watermark"));
4549
}
4650
}

library/hook/src/main/java/com/sevtinge/hyperceiler/hook/module/app/SystemFramework/Phone/SystemFrameworkB.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import com.hchen.database.HookBase;
2222
import com.sevtinge.hyperceiler.hook.module.base.BaseModule;
2323
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.DisableMiuiWatermark;
24+
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.DisableThermal;
2425
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.FlagSecure;
26+
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.ThermalBrightness;
2527
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.corepatch.AllowUpdateSystemApp;
2628
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.corepatch.BypassIsolationViolation;
2729
import com.sevtinge.hyperceiler.hook.module.hook.systemframework.corepatch.BypassSignCheckForT;
@@ -41,6 +43,8 @@ public void handleLoadPackage() {
4143
initHook(new FlagSecure(), mPrefsMap.getBoolean("system_other_flag_secure"));
4244

4345
// 其它-底层
46+
initHook(DisableThermal.INSTANCE, mPrefsMap.getBoolean("system_framework_other_disable_thermal"));
47+
initHook(new ThermalBrightness(), mPrefsMap.getBoolean("system_framework_other_thermal_brightness"));
4448
initHook(new DisableMiuiWatermark(), mPrefsMap.getBoolean("system_framework_disable_miui_watermark"));
4549
}
4650
}

library/hook/src/main/java/com/sevtinge/hyperceiler/hook/module/hook/powerkeeper/GmsDozeFix.java

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -31,65 +31,69 @@
3131
public class GmsDozeFix extends BaseHook {
3232
@Override
3333
public void init() throws NoSuchMethodException {
34-
Class<?> GmsObserver = XposedHelpers.findClassIfExists("com.miui.powerkeeper.utils.GmsObserver", lpparam.classLoader);
35-
findAndHookMethod(GmsObserver, "isGmsControlEnabled", new MethodHook() {
34+
Class<?> GmsObserver = findClassIfExists("com.miui.powerkeeper.utils.GmsObserver", lpparam.classLoader);
35+
findAndHookMethod(GmsObserver, "initGmsControl", new MethodHook() {
3636
@Override
37-
protected void after(MethodHookParam param) throws Throwable {
38-
param.setResult(false);
37+
protected void before(MethodHookParam param) {
38+
param.setResult(null);
3939
}
4040
});
4141

42-
Class<?> Misc = XposedHelpers.findClassIfExists("com.miui.powerkeeper.provider.SimpleSettings$Misc", lpparam.classLoader);
43-
findAndHookMethod(Misc, "getBoolean", Context.class, String.class, boolean.class, new MethodHook() {
42+
findAndHookMethod(GmsObserver, "updateGmsNetWork", boolean.class, new MethodHook() {
4443
@Override
45-
protected void after(MethodHookParam methodHookParam) throws Throwable {
46-
if ("gms_control".equals((String) methodHookParam.args[1])) {
47-
methodHookParam.setResult(false);
48-
}
44+
protected void before(MethodHookParam param) {
45+
param.setResult(null);
4946
}
5047
});
5148

52-
Class<?> MilletPolicy = XposedHelpers.findClassIfExists("com.miui.powerkeeper.millet.MilletPolicy", lpparam.classLoader);
49+
findAndHookMethod(GmsObserver, "onGoogleReachabilityChanged", boolean.class, new MethodHook() {
50+
@Override
51+
protected void before(MethodHookParam param) {
52+
param.args[0] = true;
53+
}
54+
});
5355

54-
MethodHook methodHook = new MethodHook() {
55-
protected void before(MethodHook.MethodHookParam methodHookParam) throws Throwable {
56-
Field[] declaredFields = null;
57-
super.after(methodHookParam);
58-
boolean mSystemBlackList = false;
59-
boolean whiteApps = false;
60-
boolean mDataWhiteList = false;
56+
try {
57+
Class<?> MilletPolicy = findClass("com.miui.powerkeeper.millet.MilletPolicy", lpparam.classLoader);
58+
findAndHookConstructor("com.miui.powerkeeper.millet.MilletPolicy", Context.class, new MethodHook() {
59+
protected void before(MethodHookParam methodHookParam) throws Throwable {
60+
super.after(methodHookParam);
61+
boolean mSystemBlackList = false;
62+
boolean whiteApps = false;
63+
boolean mDataWhiteList = false;
6164

62-
for (Field field : MilletPolicy.getDeclaredFields()) {
63-
if (field.getName().equals("mSystemBlackList")) {
64-
mSystemBlackList = true;
65-
} else if (field.getName().equals("whiteApps")) {
66-
whiteApps = true;
67-
} else if (field.getName().equals("mDataWhiteList")) {
68-
mDataWhiteList = true;
65+
for (Field field : MilletPolicy.getDeclaredFields()) {
66+
if (field.getName().equals("mSystemBlackList")) {
67+
mSystemBlackList = true;
68+
} else if (field.getName().equals("whiteApps")) {
69+
whiteApps = true;
70+
} else if (field.getName().equals("mDataWhiteList")) {
71+
mDataWhiteList = true;
72+
}
6973
}
70-
}
71-
72-
if (mSystemBlackList) {
73-
List blackList = (List) XposedHelpers.getObjectField(methodHookParam.thisObject, "mSystemBlackList");
74-
blackList.remove("com.google.android.gms");
75-
XposedHelpers.setObjectField(methodHookParam.thisObject, "mSystemBlackList", blackList);
76-
}
77-
if (whiteApps) {
78-
List whiteAppList = (List) XposedHelpers.getObjectField(methodHookParam.thisObject, "whiteApps");
79-
whiteAppList.remove("com.google.android.gms");
80-
whiteAppList.remove("com.google.android.ext.services");
81-
XposedHelpers.setObjectField(methodHookParam.thisObject, "whiteApps", whiteAppList);
82-
}
83-
if (mDataWhiteList) {
84-
List dataWhiteList = (List) XposedHelpers.getObjectField(methodHookParam.thisObject, "mDataWhiteList");
85-
dataWhiteList.add("com.google.android.gms");
8674

87-
XposedHelpers.setObjectField(methodHookParam.thisObject, "mDataWhiteList", dataWhiteList);
88-
}
75+
if (mSystemBlackList) {
76+
List blackList = (List) XposedHelpers.getObjectField(methodHookParam.thisObject, "mSystemBlackList");
77+
blackList.remove("com.google.android.gms");
78+
XposedHelpers.setObjectField(methodHookParam.thisObject, "mSystemBlackList", blackList);
79+
}
80+
if (whiteApps) {
81+
List whiteAppList = (List) XposedHelpers.getObjectField(methodHookParam.thisObject, "whiteApps");
82+
whiteAppList.remove("com.google.android.gms");
83+
whiteAppList.remove("com.google.android.ext.services");
84+
XposedHelpers.setObjectField(methodHookParam.thisObject, "whiteApps", whiteAppList);
85+
}
86+
if (mDataWhiteList) {
87+
List dataWhiteList = (List) XposedHelpers.getObjectField(methodHookParam.thisObject, "mDataWhiteList");
88+
dataWhiteList.add("com.google.android.gms");
8989

90-
}
91-
};
92-
XposedHelpers.findAndHookConstructor(MilletPolicy, new Object[]{Context.class, methodHook});
90+
XposedHelpers.setObjectField(methodHookParam.thisObject, "mDataWhiteList", dataWhiteList);
91+
}
9392

93+
}
94+
});
95+
} catch (XposedHelpers.ClassNotFoundError e) {
96+
logE(TAG, this.lpparam.packageName, "Hook failed: "+ e);
97+
}
9498
}
9599
}

library/hook/src/main/java/com/sevtinge/hyperceiler/hook/module/hook/systemframework/ThermalBrightness.java

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@ public class ThermalBrightness extends BaseHook {
2727
public final String automaticBrightnessControllerImpl = "com.android.server.display.AutomaticBrightnessControllerImpl";
2828
public final String thermalBrightnessController = "com.android.server.display.ThermalBrightnessController";
2929
public final String temperatureController = "com.android.server.display.TemperatureController";
30+
public final String thermalObserver = "com.android.server.display.ThermalObserver";
31+
3032

3133
@Override
3234
public void init() {
3335
try {
34-
XposedHelpers.findClass(displayPowerControllerImpl, lpparam.classLoader);
36+
findClass(displayPowerControllerImpl, lpparam.classLoader);
3537
findAndHookConstructor(displayPowerControllerImpl,
3638
new MethodHook() {
3739
@Override
@@ -47,7 +49,7 @@ protected void after(MethodHookParam param) {
4749
}
4850

4951
try {
50-
XposedHelpers.findClass(automaticBrightnessControllerImpl, lpparam.classLoader);
52+
findClass(automaticBrightnessControllerImpl, lpparam.classLoader);
5153
findAndHookConstructor(automaticBrightnessControllerImpl,
5254
new MethodHook() {
5355
@Override
@@ -61,7 +63,7 @@ protected void after(MethodHookParam param) {
6163
}
6264

6365
try {
64-
findClassIfExists(temperatureController).getDeclaredMethod("updateTemperature");
66+
findClass(temperatureController, lpparam.classLoader).getDeclaredMethod("updateTemperature");
6567
findAndHookMethod(temperatureController,
6668
"updateTemperature", new MethodHook() {
6769
@Override
@@ -72,16 +74,34 @@ protected void before(MethodHookParam param) {
7274
);
7375
} catch (NoSuchMethodException e) {
7476
logE(TAG, "android", "Don't Have updateTemperature: " + e);
77+
} catch (XposedHelpers.ClassNotFoundError ne) {
78+
logE(TAG, "android", "Class not found: " + ne);
79+
}
80+
81+
try {
82+
findClass(thermalObserver, lpparam.classLoader).getDeclaredMethod("updateTemperature");
83+
findAndHookMethod(thermalObserver,
84+
"updateTemperature", new MethodHook() {
85+
@Override
86+
protected void before(MethodHookParam param) {
87+
param.setResult(null);
88+
}
89+
}
90+
);
91+
} catch (NoSuchMethodException e) {
92+
logE(TAG, "android", "Don't Have updateTemperature: " + e);
93+
} catch (XposedHelpers.ClassNotFoundError ne) {
94+
logE(TAG, "android", "Class not found: " + ne);
7595
}
7696

77-
/*hookAllMethods("com.android.server.display.DisplayPowerControllerImpl",
97+
hookAllMethods("com.android.server.display.DisplayPowerControllerImpl",
7898
"adjustBrightnessByThermal", new MethodHook() {
7999
@Override
80100
protected void before(MethodHookParam param) {
81101
param.setResult(param.args[0]);
82102
}
83103
}
84-
);*/
104+
);
85105

86106
try {
87107
findClassIfExists(displayPowerControllerImpl).getDeclaredMethod("updateThermalBrightness", float.class);
@@ -110,5 +130,17 @@ protected void before(MethodHookParam param) {
110130
} catch (NoSuchMethodException e) {
111131
logE(TAG, "android", "Don't Have updateThermalBrightnessIfNeeded: " + e);
112132
}
133+
134+
try {
135+
findClassIfExists(thermalBrightnessController).getDeclaredMethod("updateConditionState", int.class);
136+
findAndHookMethod(thermalBrightnessController, "updateConditionState", int.class, new MethodHook() {
137+
@Override
138+
protected void before(MethodHookParam param) {
139+
param.setResult(null);
140+
}
141+
});
142+
} catch (NoSuchMethodException e) {
143+
logE(TAG, "android", "Don't Have updateConditionState: " + e);
144+
}
113145
}
114146
}

0 commit comments

Comments
 (0)