Android 使用 adb 启动 activity、service,发送 broadcast
adb(Android Debug Bridge)是 Android 开发中不可或缺的命令行工具,它允许开发者与设备进行通信,执行各种调试和管理操作。结合am(Activity Manager)命令,我们可以通过 adb 启动或停止应用组件(如 Activity、Service),发送广播,甚至进行端口转发。本文将详细介绍如何使用 adb 命令来操作这些组件,并给出具体示例。
博主博客
准备工作
- 确保已安装 Android SDK Platform-Tools,并配置好环境变量,使
adb命令可用。 - 通过 USB 连接 Android 设备,并在设备上开启“开发者选项”和“USB 调试”。
- 执行
adb devices确认设备已成功连接。
一、启动 Activity
使用 am start 命令可以启动一个指定的 Activity。基本语法如下:
adb shell am start -n <包名>/<活动类全名>
- 包名:应用的包名(例如
com.android.browser)。 - 活动类全名:要启动的 Activity 完整类名(例如
com.android.browser.BrowserActivity)。
示例:启动系统浏览器
adb shell am start -n com.android.browser/com.android.browser.BrowserActivity
说明:如果 Activity 需要额外参数(如 -d 指定数据 URI,-a 指定 Action),也可以添加到命令中。例如:
adb shell am start -a android.intent.action.VIEW -d http://www.example.com
二、关闭 Activity(强制停止应用)
通过 am force-stop 可以强制停止某个应用(及其所有组件)。语法:
adb shell am force-stop <包名>
示例:关闭浏览器应用
adb shell am force-stop com.android.browser
三、启动 Service
启动 Service 使用 am startservice 命令。语法:
adb shell am startservice -n <包名>/<服务类全名>
示例:启动一个自定义 Service(假设包名为 com.android.traffic,服务为 maniservice)
adb shell am startservice -n com.android.traffic/com.android.traffic.maniservice
注意:Service 必须在应用的 AndroidManifest.xml 中声明,并且如果 Service 需要特定权限或 Intent 参数,可以通过 --es(字符串 extra)等方式传递。
四、卸载应用程序
虽然不直接属于 am 命令,但 adb uninstall 可以快速移除应用。语法:
adb uninstall <包名>
示例:卸载浏览器
adb uninstall com.android.browser
五、发送广播
使用 am broadcast 可以发送全局广播。基本语法:
adb shell am broadcast -a <广播动作>
示例:发送网络状态变化的广播(系统常用)
adb shell am broadcast -a android.net.conn.CONNECTIVITY_CHANGE
还可以添加 Extra 数据,例如发送一个自定义广播并附带字符串参数:
adb shell am broadcast -a com.example.CUSTOM_BROADCAST --es key "value"
六、端口转发与相关广播
adb forward 用于设置端口转发,将 PC 的某个端口映射到设备的某个端口。语法:
adb forward tcp:<本地端口> tcp:<设备端口>
示例:将 PC 的 12580 端口转发到设备的 10086 端口
adb forward tcp:12580 tcp:10086
配合广播可以通知设备上的服务进行相应操作。例如,先发送广播让服务停止,再进行端口转发,然后发送广播让服务启动:
adb shell am broadcast -a NotifyServiceStop
adb forward tcp:12580 tcp:10086
adb shell am broadcast -a NotifyServiceStart
(这里的 NotifyServiceStop 和 NotifyServiceStart 是假设的自定义广播动作,实际需根据应用定义使用)
注意事项
- 包名与组件名的准确性:必须确保包名和类名完全正确(包括大小写)。可以通过
adb shell dumpsys package <包名>查看应用详情。 - 权限问题:某些系统组件或受保护的广播可能需要系统权限才能发送,普通应用可能无法接收或发送。
- Activity 启动模式:使用
am start启动 Activity 时,可能会受启动模式(如singleTask)影响,导致实际行为与预期不同。 - 安全限制:从 Android 8.0 开始,对隐式广播的限制加强,许多系统广播无法通过普通应用发送或接收,但
adb shell拥有较高权限,仍可发送大多数广播。
总结
通过 adb 和 am 命令,开发者可以灵活地在不打开应用的情况下测试组件交互、模拟系统事件或进行自动化操作。掌握这些命令能显著提高调试效率,是 Android 开发者的必备技能。本文介绍了常用的启动 Activity/Service、发送广播、端口转发等操作,实际使用中还可结合 am 的更多参数(如 --ei 整数 extra、--ez 布尔 extra 等)传递复杂数据,以满足多样化需求。
Android 使用 adb 启动 activity、service,发送 broadcast
https://blog.uso6.com/archives/android-shi-yong-adb-qi-dong-activity-service-fa-song-broadcast
评论