如何通过adb shell实现Google TV重启/关机后应用自动启动?
解决方案
adb shell am start属于手动触发的一次性启动指令,本身不具备开机持久化能力,设备重启后系统不会自动执行该命令,可根据你对设备、应用的控制权限选择对应方案:
方案1:应用侧配置开机自启(适用于自行开发的可控应用)
- 在应用的
AndroidManifest.xml中声明开机广播监听权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- 注册静态
BroadcastReceiver,监听android.intent.action.BOOT_COMPLETED系统广播,收到广播后直接执行启动目标页面/初始化应用的逻辑。 - 适配注意事项:
- Android 10及以上版本默认限制后台启动Activity,需要提前给应用申请「后台弹出界面」权限;小米、华为、OPPO等定制ROM需要额外在系统设置中打开应用的「自启动」开关,否则开机广播会被系统直接拦截。
- Android 12及以上版本要求应用安装后至少被手动启动过1次,才能接收到开机广播,全新安装未打开的应用无法触发自启。
- 调试阶段无需反复重启设备,可执行
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -p 你的应用包名模拟开机广播快速验证逻辑。
方案2:系统侧配置自动启动规则(适用于无法修改源码的第三方应用)
- 已root/拥有系统签名的设备:编写shell脚本存入
/system/etc/init.d/目录,脚本内添加等待系统加载完成的逻辑后执行对应的am start启动命令,给脚本添加可执行权限chmod +x 脚本路径,开机时系统会自动执行init.d目录下的脚本。 - 无root权限的普通消费级设备:使用系统自带自动化工具(小米自动任务、三星Bixby日常程序等)或第三方自动化APP(如Tasker),设置触发条件为「设备开机完成」,执行动作为启动目标应用即可,配置完成后重启无需手动敲adb命令。
- 批量测试/部署场景:保持设备adb调试常开,连接到常运行的主机,在主机侧编写守护脚本,检测到设备adb上线(即设备重启完成完成连接)时自动下发
adb shell am start指令,全程无需人工操作。
常见避坑点
- 不要将启动脚本存放在应用私有目录,设备重启后应用未启动时该目录下的脚本不会被系统读取,配置完全不生效。
- 部分深度定制ROM会默认冻结长期未使用的第三方应用,需要额外给目标应用开启「后台无限制」「不允许优化电池使用」权限,避免开机后系统直接拦截启动请求。
内容的提问来源于stack exchange,提问作者Andy Bogards
相关产品推荐
相关产品推荐

