Skip to content

Commit 2191b01

Browse files
committed
调整了系统hooker延迟工作的实现方式
1 parent 9e5a0f9 commit 2191b01

5 files changed

Lines changed: 31 additions & 24 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# fcmfix(Android 10以上14以下 )(Android 14?)
1+
# fcmfix(Android 10-15 )
22

33
[![Android CI](https://github.com/kooritea/fcmfix/workflows/Android%20CI/badge.svg)](https://github.com/kooritea/fcmfix/actions)
44

app/src/main/java/com/kooritea/fcmfix/XposedMain.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.kooritea.fcmfix;
22

33
import android.annotation.SuppressLint;
4-
import android.os.Build;
5-
import android.os.Handler;
6-
import android.os.Looper;
74

85
import com.kooritea.fcmfix.xposed.AutoStartFix;
96
import com.kooritea.fcmfix.xposed.BroadcastFix;
@@ -28,20 +25,28 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageP
2825
return;
2926
}
3027
if(loadPackageParam.packageName.equals("android")){
31-
new Handler(Looper.getMainLooper()).postDelayed(() -> {
32-
XposedModule.staticLoadPackageParam = loadPackageParam;
33-
XposedBridge.log("[fcmfix] start hook com.android.server.am.ActivityManagerService");
34-
new BroadcastFix(loadPackageParam);
28+
XposedModule.isBootComplete = false;
29+
XposedModule.staticLoadPackageParam = loadPackageParam;
30+
new Thread(() -> {
31+
try {
32+
Thread.sleep(60000);
33+
XposedModule.isBootComplete = true;
34+
XposedBridge.log("[fcmfix] isBootComplete");
35+
} catch (Exception e) {
36+
XposedBridge.log("[fcmfix] "+e.getMessage());
37+
}
38+
}).start();
39+
XposedBridge.log("[fcmfix] start hook com.android.server.am.ActivityManagerService");
40+
new BroadcastFix(loadPackageParam);
3541

36-
XposedBridge.log("[fcmfix] start hook com.android.server.notification.NotificationManagerServiceInjector");
37-
new MiuiLocalNotificationFix(loadPackageParam);
42+
XposedBridge.log("[fcmfix] start hook com.android.server.notification.NotificationManagerServiceInjector");
43+
new MiuiLocalNotificationFix(loadPackageParam);
3844

39-
XposedBridge.log("[fcmfix] com.android.server.am.BroadcastQueueInjector.checkApplicationAutoStart");
40-
new AutoStartFix(loadPackageParam);
45+
XposedBridge.log("[fcmfix] com.android.server.am.BroadcastQueueInjector.checkApplicationAutoStart");
46+
new AutoStartFix(loadPackageParam);
4147

42-
XposedBridge.log("[fcmfix] com.android.server.notification.NotificationManagerService");
43-
new KeepNotification(loadPackageParam);
44-
}, 60000);
48+
XposedBridge.log("[fcmfix] com.android.server.notification.NotificationManagerService");
49+
new KeepNotification(loadPackageParam);
4550
}
4651

4752
if(loadPackageParam.packageName.equals("com.google.android.gms") && loadPackageParam.isFirstApplication){

app/src/main/java/com/kooritea/fcmfix/xposed/BroadcastFix.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@ public class BroadcastFix extends XposedModule {
2626

2727
public BroadcastFix(XC_LoadPackage.LoadPackageParam loadPackageParam) {
2828
super(loadPackageParam);
29-
}
30-
31-
@Override
32-
protected void onCanReadConfig() {
3329
try{
3430
this.startHookBroadcastIntentLocked();
3531
}catch (Exception e) {
@@ -152,6 +148,9 @@ protected void startHookBroadcastIntentLocked(){
152148
XposedBridge.hookMethod(targetMethod,new XC_MethodHook() {
153149
@Override
154150
protected void beforeHookedMethod(MethodHookParam methodHookParam) {
151+
if(!isBootComplete){
152+
return;
153+
}
155154
Intent intent = (Intent) methodHookParam.args[finalIntent_args_index];
156155
if(intent != null && intent.getPackage() != null && intent.getFlags() != Intent.FLAG_INCLUDE_STOPPED_PACKAGES && isFCMIntent(intent)){
157156
String target;
@@ -210,6 +209,9 @@ protected void startHookScheduleResultTo(){
210209
XposedBridge.hookMethod(method,new XC_MethodHook() {
211210
@Override
212211
protected void beforeHookedMethod(MethodHookParam methodHookParam) {
212+
if(!isBootComplete){
213+
return;
214+
}
213215
if(methodHookParam.args[0] == null || XposedHelpers.getObjectField(methodHookParam.args[0],"resultTo") == null || XposedHelpers.getObjectField(methodHookParam.args[0],"intent") == null || XposedHelpers.getObjectField(methodHookParam.args[0],"resultCode") == null){
214216
return;
215217
}

app/src/main/java/com/kooritea/fcmfix/xposed/KeepNotification.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,13 @@ public class KeepNotification extends XposedModule{
1313

1414
public KeepNotification(XC_LoadPackage.LoadPackageParam loadPackageParam) {
1515
super(loadPackageParam);
16-
}
17-
18-
@Override
19-
protected void onCanReadConfig() {
2016
try {
2117
this.startHook();
2218
} catch (XposedHelpers.ClassNotFoundError | NoSuchMethodError e) {
2319
printLog("No Such Method com.android.server.notification.NotificationManagerService.cancelAllNotificationsInt");
2420
}
2521
}
26-
22+
2723
protected void startHook() throws NoSuchMethodError, XposedHelpers.ClassNotFoundError {
2824
Class<?> clazz = XposedHelpers.findClass("com.android.server.notification.NotificationManagerService",loadPackageParam.classLoader);
2925
final Method[] declareMethods = clazz.getDeclaredMethods();
@@ -79,6 +75,9 @@ protected void startHook() throws NoSuchMethodError, XposedHelpers.ClassNotFound
7975
XposedBridge.hookMethod(targetMethod,new XC_MethodHook() {
8076
@Override
8177
protected void beforeHookedMethod(MethodHookParam param) {
78+
if(!isBootComplete){
79+
return;
80+
}
8281
if(getBooleanConfig("disableAutoCleanNotification",false) && targetIsAllow((String) param.args[finalPkg_args_index])){
8382
int reason = (int)param.args[finalReason_args_index];
8483
if(reason == NotificationListenerService.REASON_PACKAGE_CHANGED){

app/src/main/java/com/kooritea/fcmfix/xposed/XposedModule.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public abstract class XposedModule {
3939
protected static Context context = null;
4040
private static final ArrayList<XposedModule> instances = new ArrayList<>();
4141
private static Boolean isInitReceiver = false;
42+
public static Boolean isBootComplete = true;
4243
private static Thread loadConfigThread = null;
4344

4445
protected XposedModule(final XC_LoadPackage.LoadPackageParam loadPackageParam) {

0 commit comments

Comments
 (0)