Fix magisk su request latency (#1159)
This commit is contained in:
parent
d8ceb12b57
commit
3b230e2653
|
|
@ -20,6 +20,7 @@ import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import org.lsposed.lspd.BuildConfig;
|
import org.lsposed.lspd.BuildConfig;
|
||||||
|
|
||||||
|
import java.io.FileDescriptor;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
|
@ -31,6 +32,7 @@ public class ActivityController extends IActivityController.Stub {
|
||||||
private static Constructor<?> myActivityControllerConstructor = null;
|
private static Constructor<?> myActivityControllerConstructor = null;
|
||||||
private static Method myActivityControllerRunner = null;
|
private static Method myActivityControllerRunner = null;
|
||||||
private static boolean inited = false;
|
private static boolean inited = false;
|
||||||
|
private static int fdSize = -1;
|
||||||
|
|
||||||
private static IActivityController controller = null;
|
private static IActivityController controller = null;
|
||||||
|
|
||||||
|
|
@ -46,6 +48,10 @@ public class ActivityController extends IActivityController.Stub {
|
||||||
myActivityControllerConstructor.setAccessible(true);
|
myActivityControllerConstructor.setAccessible(true);
|
||||||
myActivityControllerRunner = myActivityControllerClass.getDeclaredMethod("run");
|
myActivityControllerRunner = myActivityControllerClass.getDeclaredMethod("run");
|
||||||
myActivityControllerRunner.setAccessible(true);
|
myActivityControllerRunner.setAccessible(true);
|
||||||
|
var tmp = Parcel.obtain();
|
||||||
|
tmp.writeFileDescriptor(FileDescriptor.in);
|
||||||
|
fdSize = tmp.dataPosition();
|
||||||
|
tmp.recycle();
|
||||||
inited = true;
|
inited = true;
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
Log.e(TAG, "Failed to init ActivityController", e);
|
Log.e(TAG, "Failed to init ActivityController", e);
|
||||||
|
|
@ -65,14 +71,17 @@ public class ActivityController extends IActivityController.Stub {
|
||||||
static boolean replaceShellCommand(IBinder am, Parcel data) {
|
static boolean replaceShellCommand(IBinder am, Parcel data) {
|
||||||
if (!inited) return false;
|
if (!inited) return false;
|
||||||
try {
|
try {
|
||||||
var in = data.readFileDescriptor();
|
data.setDataPosition(fdSize * 3);
|
||||||
var out = data.readFileDescriptor();
|
|
||||||
var err = data.readFileDescriptor();
|
|
||||||
String[] args = data.createStringArray();
|
String[] args = data.createStringArray();
|
||||||
ShellCallback shellCallback = ShellCallback.CREATOR.createFromParcel(data);
|
|
||||||
ResultReceiver resultReceiver = ResultReceiver.CREATOR.createFromParcel(data);
|
|
||||||
|
|
||||||
if (args.length > 0 && "monitor".equals(args[0])) {
|
if (args.length > 0 && "monitor".equals(args[0])) {
|
||||||
|
data.setDataPosition(0);
|
||||||
|
var in = data.readFileDescriptor();
|
||||||
|
var out = data.readFileDescriptor();
|
||||||
|
var err = data.readFileDescriptor();
|
||||||
|
data.createStringArray();
|
||||||
|
ShellCallback shellCallback = ShellCallback.CREATOR.createFromParcel(data);
|
||||||
|
ResultReceiver resultReceiver = ResultReceiver.CREATOR.createFromParcel(data);
|
||||||
new ShellCommand() {
|
new ShellCommand() {
|
||||||
@Override
|
@Override
|
||||||
public int onCommand(String cmd) {
|
public int onCommand(String cmd) {
|
||||||
|
|
@ -99,9 +108,6 @@ public class ActivityController extends IActivityController.Stub {
|
||||||
|
|
||||||
}
|
}
|
||||||
}.exec((Binder) am, in.getFileDescriptor(), out.getFileDescriptor(), err.getFileDescriptor(), args, shellCallback, resultReceiver);
|
}.exec((Binder) am, in.getFileDescriptor(), out.getFileDescriptor(), err.getFileDescriptor(), args, shellCallback, resultReceiver);
|
||||||
if (in != null) in.detachFd();
|
|
||||||
if (out != null) out.detachFd();
|
|
||||||
if (err != null) err.detachFd();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue