vibe coding为LSPosed添加新功能

Vibe coding为LSPosed添加新功能

低版本MIUI/HyperOS中不支持指定user打开某个应用的activity(am start --user 10),但LSPosed的manager中可以实现,阅读源码,发现是调用service层的startActivityAsUserWithFeature实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌──────────────────┐
│ Manager App │
│ (Client) │
└────────┬─────────┘
ILSPManagerService.startActivityAsUserWithFeature()

┌──────────────────┐
│ LSPManagerService│ ← 验证权限、处理用户切换
│ (Daemon) │
└────────┬─────────┘
ActivityManagerService.startActivityAsUserWithFeature()

┌──────────────────┐
│ActivityManager │ ← 添加 FLAG_ACTIVITY_NEW_TASK
│ Service │ 版本兼容处理
└────────┬─────────┘
IActivityManager.startActivityAsUserWithFeature()

┌──────────────────┐
│ System Server │ ← Android 系统处理启动请求
│ ActivityManager │
└──────────────────┘

于是尝试使用claude修改LSPosed-Irena添加功能,使其能接收adb shell命令然后根据参数打开多开的指定应用。

最开始claude修改magisk-loader/src/main/java/org/lsposed/lspd/service/LSPShellCommand.java

,添加lsposed命令,编译都没有问题,就是命令不生效。

1
adb shell cmd activity lsposed force-stop com.example.app

随后我引导它在LSPosed-Irena\magisk-loader\src\main\java\org\lsposed\lspd\util\ParasiticManagerHooker.java中添加相应逻辑解析参数并添加功能实现。

ParasiticManagerHooker是通过劫持com.android.shell启动管理器的地方(这是新版本兼容老版本的方法)。

1
adb shell am start -n com.android.shell/.BugreportWarningActivity -c org.lsposed.manager.LAUNCH_MANAGE
1
if (!intent.hasCategory("org.lsposed.manager.LAUNCH_MANAGER")) return;

新版本支持secert_code启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// LSPosedService.java
private void registerSecretCodeReceiver() {
IntentFilter intentFilter = new IntentFilter();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
intentFilter.addAction(TelephonyManager.ACTION_SECRET_CODE);
} else {
intentFilter.addAction(Telephony.Sms.Intents.SECRET_CODE_ACTION);
}
intentFilter.addDataAuthority("5776733", null); // 只监听这个特定暗码
intentFilter.addDataScheme("android_secret_code");

registerReceiver(List.of(intentFilter), "android.permission.CONTROL_INCALL_EXPERIENCE",
0, this::dispatchSecretCodeReceive, Context.RECEIVER_EXPORTED);
}

最终通过在ParasiticManagerHooker中添加代码,实现了启动、关闭应用、管理模块等功能。

image-20260414162452694

最终代码:

https://github.com/xjohjrdy/LSPosed-Irena