【Android】am命令
Android中的am命令是进行ams调试的有利工具,如启动activity,广播,
可以使用am -h来查看帮助信息,
am -h
Activity manager (activity) commands:
help
Print this help text.
logging <enable-text|disable-text> <CONFIG>
app-logging <PROCESS_NAME> <UID> <enable-text|disable-text> <CONFIG>
start-activity [-D] [-N] [-W] [-P <FILE>] [--start-profiler <FILE>]
[--sampling INTERVAL] [--clock-type <TYPE>] [--streaming]
[-R COUNT] [-S] [--track-allocation]
[--user <USER_ID> | current] [--suspend] <INTENT>
Start an Activity. Options are:
-D: enable debugging
--suspend: debugged app suspend threads at startup (only with -D)
-N: enable native debugging
-W: wait for launch to complete
...
am命令其实是一个脚本调用,
/bin $ cat am
#!/system/bin/sh
if [ "$1" != "instrument" ] ; then
cmd activity "$@"
else
base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin com.android.commands.am.Am "$@"
fi
am(Activity Manager)命令是 Android 提供的一个强大的 shell 工具,用于与系统的服务进行交互,主要用来启动活动(Activity)、服务(Service),发送广播(Broadcast),以及执行其他与应用组件相关的操作。通过 adb shell 或者直接在设备上的终端中使用 am 命令,开发者可以方便地调试和测试应用程序。
使用方法
要使用 am 命令,你需要通过 adb shell 连接到你的 Android 设备或模拟器,或者在设备上具有 root 权限的终端环境中运行这些命令。
基本语法
am [subcommand] [options]
常用子命令
启动 Activity
使用 am start 可以启动一个 Activity。
adb shell am start -n <package_name>/<activity_class_name>
例如:
adb shell am start -n com.example.myapp/.MainActivity
启动 Service
使用 am startservice 可以启动一个后台 Service。
adb shell am startservice -n <package_name>/<service_class_name>
例如:
adb shell am startservice -n com.example.myapp/.MyBackgroundService
发送广播
使用 am broadcast 可以发送一个广播 Intent。
adb shell am broadcast -a <broadcast_action>
例如,发送一个自定义广播:
adb shell am broadcast -a com.example.myapp.CUSTOM_INTENT
强制停止应用
使用 am force-stop 可以终止指定包名的所有进程。
adb shell am force-stop <package_name>
例如:
adb shell am force-stop com.example.myapp
查看堆栈信息
使用 am stack list 查看当前任务栈的信息。
adb shell am stack list
启动 Instrumentation 测试
使用 am instrument 可以运行 instrumentation 测试。
adb shell am instrument -w <test_package_name>/<runner_class>
例如:
adb shell am instrument -w com.example.myapp.test/androidx.test.runner.AndroidJUnitRunner
参数选项
-n:指定要启动的组件(Activity 或 Service)的完整类名,格式为 <package_name>/<class_name>。
-a:指定 Intent 的 action 属性。
-d:指定 Intent 的 data URI。
-c:指定 Intent 的 category 属性。
-e <key> <value>:添加额外的数据到 Intent 中。
-f:设置 Intent 标志位,如 FLAG_ACTIVITY_NEW_TASK 等。
示例
启动一个特定 URL 的浏览器:
adb shell am start -a android.intent.action.VIEW -d http://www.example.com
向某个 Activity 发送带额外数据的 Intent:
adb shell am start -n com.example.myapp/.MainActivity -e key value
发送包含多个 category 的广播:
adb shell am broadcast -a com.example.myapp.CUSTOM_INTENT -c android.intent.category.DEFAULT -c com.example.myapp.MY_CATEGORY
注意事项
使用 am 命令时,请确保你有足够的权限。某些命令可能需要设备具有 root 权限才能执行。
在使用 am 命令进行调试时,请注意不要中断正在运行的应用程序的正常流程,以免造成不稳定的状态。
对于自动化测试或脚本编写,am 命令非常有用,但请确保理解每个命令的具体含义及其对系统的影响。
总之,am 命令是一个功能强大且灵活的工具,适用于各种开发和调试场景,能够极大地提高工作效率。通过掌握 am 命令的不同用法,你可以更有效地管理和测试 Android 应用程序。