我认为提出这个问题的最佳方式是通过示例,所以我将使用特定的应用程序。
Android的WebKey应用程序有一个启动时启动的选项,我更喜欢保持禁用状态。但我想通过远程 SSH控制台手动启动这个程序。
我的尝试是这个命令(可以看出,失败):
root@S3:/ # am start -a android.intent.action.MAIN -n com.webkey/.BootStarter
am start -a android.intent.action.MAIN -n com.webkey/.BootStarter
Starting: Intent { act=android.intent.action.MAIN cmp=com.webkey/.BootStarter }
Error type 3
Error: Activity class {com.webkey/com.webkey.BootStarter} does not exist.
看来我指的不是正确的类。这就是我找到该课程的方式:
root@S3:/ # dumpsys package resolvers receiver | awk '/android.intent.action.BOOT_COMPLETED/{p=1;next}/:/{p=0}p {print $2}' | grep webkey
com.webkey/.BootStarter
com.webkey/androidx.work.impl.background.systemalarm.RescheduleReceiver
实际上,我什至不知道如何获得正确的类来启动一个知道其合格应用程序名称的程序。
我不知道问题是否出在 ADB 配置中:
root@S3:/ # adb shell
adb shell
* daemon not running. starting it now on port 5038 *
* daemon started successfully *
error: device not found
有人可以给我任何想法来手动启动正确的程序吗?
补充说明:
- 所有 shell 测试都以root (
su
) 身份执行。 - 该设备已植根。也欢迎回答非根设备。
新测试:
与TeamViewer Host相同的示例:
root@S3:/ # dumpsys package resolvers receiver | awk '/android.intent.action.BOOT_COMPLETED/{p=1;next}/:/{p=0}p {print $2}' | grep team -i
com.teamviewer.host.market/com.teamviewer.host.receiver.BootReceiver
但它没有启动,也没有:
root@S3:/ # am start -n com.teamviewer.host.market/com.teamviewer.host.receiver.BootReceiver
Starting: Intent { cmp=com.teamviewer.host.market/com.teamviewer.host.receiver.BootReceiver }
Error type 3
Error: Activity class {com.teamviewer.host.market/com.teamviewer.host.receiver.BootReceiver} does not exist.