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命令,编译都没有问题,就是命令不生效。
| 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启动管理器的地方(这是新版本兼容老版本的方法)。
| adb shell am start -n com.android.shell/.BugreportWarningActivity -c org.lsposed.manager.LAUNCH_MANAGE
|
| if (!intent.hasCategory("org.lsposed.manager.LAUNCH_MANAGER")) return;
|
新版本支持secert_code启动
| 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中添加代码,实现了启动、关闭应用、管理模块等功能。

最终代码:
https://github.com/xjohjrdy/LSPosed-Irena