需求
- 新手机上配置了Termux、Surfboard、droidVNC-ng,除了Termux能用Termux:Boot启动起来,没有一个能自动起来的
- droidVNC可以自己启动,但是droidVNC没法自动点上各种授权(捕获屏幕、模拟输入)
- Surfboard就直接人影都不见
- 但是我的手机是个远程调试机,我肯定不能接受他不能稳定启动
- 干脆直接用 Termux来把它们全都启动了(
方案
总体思路
- 找到各个app的Activity、Service之类的,然后用am命令启动就可以了
- 安卓有个App Manager可以看所有的App有个Activity和Service
Surfboard自启
Surfboard的很简单,直接把他的VpnService打开就完事了,不需要任何Intent所以直接am start-foreground-service就可以了
#!/data/data/com.termux/files/usr/bin/sh sudo sh -c "PATH=/system/bin am start-foreground-service com.getsurfboard/.ui.service.SurfboardVpn"
droidVNC自启
droidVNC的就复杂的多:
- droidVNC要求的权限比较敏感,所以需要多次UI确认
- 控制屏幕需要打开无障碍服务权限
- 捕获屏幕需要打开PROJECT_MEDIA权限
- 官方给出了对应的adb命令
- 从实现上来看:他自带两个Service,MainService和InputService
- 但是不管怎么开这些service都启动不起来服务
- 我们直接打开MainService → 黑屏
- 同时打开MainService和InputService → 黑屏
- 界面里从来没有同时显示过三个权限全绿,研究是否是权限问题:从官方adb命令入手
- 第一条命令工作的的很正常
- 第二条命令有时候能正常,但是刚开机的时候用却不正常
- 经过调查,发现不正常的时候,无障碍的列表里虽然droidVNC开着,但是显示服务出现错误
- 仔细研究第二条命令:第二条命令实际上是往enabled_accessibility_services后面append东西
- 猜测android要在这个settings去变更的时候才去启动对应服务,那我一直put一样的service列表并不能触发
- 所以将其先设置为null,在设置为我们的InputService
- 成功
- 三个全绿之后,手动启动Service仍然黑屏,但是在界面里面启动却可以
- 直接查看GitHub程序源代码,发现在启动service的intent中需要同时发送act=start
- 实际上,搞完后才发现作者正在重写这一片
#!/data/data/com.termux/files/usr/bin/sh #sudo sh -c 'appops set net.christianbeier.droidvnc_ng PROJECT_MEDIA allow' sudo sh -c 'PATH=/system/bin settings put secure enabled_accessibility_services net.christianbeier.droidvnc_ng/.InputService' sleep 1 sudo sh -c 'PATH=/system/bin settings put secure enabled_accessibility_services null' sleep 1 sudo sh -c 'PATH=/system/bin settings put secure enabled_accessibility_services net.christianbeier.droidvnc_ng/.InputService' sleep 1 #sudo sh -c 'PATH=/system/bin am start net.christianbeier.droidvnc_ng/.MainActivity' #sleep 3 sudo sh -c 'PATH=/system/bin cmd appops set net.christianbeier.droidvnc_ng PROJECT_MEDIA allow' sleep 2 sudo sh -c 'PATH=/system/bin am start-foreground-service -n net.christianbeier.droidvnc_ng/.MainService -a start' #sudo sh -c 'PATH=/system/bin am start-foreground-service net.christianbeier.droidvnc_ng/.InputService' #sudo sh -c 'PATH=/system/bin am start-foreground-service net.christianbeier.droidvnc_ng/.MainService' #sleep 3 #sudo sh -c 'PATH=/system/bin cmd appops set net.christianbeier.droidvnc_ng PROJECT_MEDIA allow'