From 7087c6f7527468504b025316fa7dd4935665e9c0 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Thu, 9 Mar 2023 12:28:34 +0800 Subject: [PATCH] Support Android 14 DP2 (#2434) close #2433 But the notification cannot send broadcast now. --- .../main/java/org/lsposed/manager/App.java | 2 +- .../lspd/service/ActivityController.java | 28 ++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/lsposed/manager/App.java b/app/src/main/java/org/lsposed/manager/App.java index 9765c4d3..42c9e856 100644 --- a/app/src/main/java/org/lsposed/manager/App.java +++ b/app/src/main/java/org/lsposed/manager/App.java @@ -254,7 +254,7 @@ public class App extends Application { } } } - }, intentFilter); + }, intentFilter, Context.RECEIVER_NOT_EXPORTED); UpdateUtil.loadRemoteVersion(); diff --git a/magisk-loader/src/main/java/org/lsposed/lspd/service/ActivityController.java b/magisk-loader/src/main/java/org/lsposed/lspd/service/ActivityController.java index 776d60de..0371bf1a 100644 --- a/magisk-loader/src/main/java/org/lsposed/lspd/service/ActivityController.java +++ b/magisk-loader/src/main/java/org/lsposed/lspd/service/ActivityController.java @@ -48,9 +48,14 @@ public class ActivityController extends IActivityController.Stub { try { myActivityControllerConstructor = myActivityControllerClass.getDeclaredConstructor(IActivityManager.class, PrintWriter.class, InputStream.class, String.class, boolean.class); - } catch (NoSuchMethodException ignored) { - myActivityControllerConstructor = myActivityControllerClass.getDeclaredConstructor(IActivityManager.class, PrintWriter.class, InputStream.class, - String.class, boolean.class, boolean.class, String.class, boolean.class); + } catch (NoSuchMethodException e1) { + try { + myActivityControllerConstructor = myActivityControllerClass.getDeclaredConstructor(IActivityManager.class, PrintWriter.class, InputStream.class, + String.class, boolean.class, boolean.class, String.class, boolean.class); + } catch (NoSuchMethodException e2) { + myActivityControllerConstructor = myActivityControllerClass.getDeclaredConstructor(IActivityManager.class, PrintWriter.class, InputStream.class, + String.class, boolean.class, boolean.class, String.class, boolean.class, boolean.class); + } } myActivityControllerConstructor.setAccessible(true); myActivityControllerRunner = myActivityControllerClass.getDeclaredMethod("run"); @@ -99,12 +104,13 @@ public class ActivityController extends IActivityController.Stub { boolean simpleMode = false; String target = null; boolean alwaysContinue = false; + boolean alwaysKill = false; while ((opt = getNextOption()) != null) { if (opt.equals("--gdb")) { gdbPort = getNextArgRequired(); } else if (opt.equals("-m")) { monkey = true; - } else if (myActivityControllerConstructor.getParameterCount() > 5) { + } else if (myActivityControllerConstructor.getParameterCount() == 8) { switch (opt) { case "-p": target = getNextArgRequired(); @@ -116,13 +122,19 @@ public class ActivityController extends IActivityController.Stub { alwaysContinue = true; break; } + } else if (myActivityControllerConstructor.getParameterCount() > 8) { + switch (opt) { + case "-k": + alwaysKill = true; + break; + } } else { getErrPrintWriter().println("Error: Unknown option: " + opt); return -1; } } - return replaceMyControllerActivity(pw, getRawInputStream(), gdbPort, monkey, simpleMode, target, alwaysContinue); + return replaceMyControllerActivity(pw, getRawInputStream(), gdbPort, monkey, simpleMode, target, alwaysContinue, alwaysKill); } @Override @@ -161,7 +173,7 @@ public class ActivityController extends IActivityController.Stub { return false; } - static private int replaceMyControllerActivity(PrintWriter pw, InputStream stream, String gdbPort, boolean monkey, boolean simpleMode, String target, boolean alwaysContinue) { + static private int replaceMyControllerActivity(PrintWriter pw, InputStream stream, String gdbPort, boolean monkey, boolean simpleMode, String target, boolean alwaysContinue, boolean alwaysKill) { try { InvocationHandler handler = (proxy, method, args1) -> { if (method.getName().equals("setActivityController")) { @@ -178,8 +190,10 @@ public class ActivityController extends IActivityController.Stub { Object ctrl; if (myActivityControllerConstructor.getParameterCount() == 5) { ctrl = myActivityControllerConstructor.newInstance(amProxy, pw, stream, gdbPort, monkey); - } else { + } else if (myActivityControllerConstructor.getParameterCount() == 8){ ctrl = myActivityControllerConstructor.newInstance(amProxy, pw, stream, gdbPort, monkey, simpleMode, target, alwaysContinue); + } else { + ctrl = myActivityControllerConstructor.newInstance(amProxy, pw, stream, gdbPort, monkey, simpleMode, target, alwaysContinue, alwaysKill); } myActivityControllerRunner.invoke(ctrl); return 0;