Android 使用 am 命令启动一个活动组件
am 命令说明
am start -n
命令是 Android 调试桥(ADB)工具的一部分,用于在 Android 设备上启动一个活动。以下是该命令及其组成部分的详细解释:
am
: 代表 Activity Manager(活动管理器)。它是一个命令行工具,可以用于在 Android 设备上执行各种与活动、服务和广播相关的操作。start
: 这个子命令用于启动一个活动。活动表示一个带有用户界面的单个屏幕,启动活动意味着打开一个特定的应用程序界面。-n
: 该选项指定你想要启动的活动的组件名称。组件名称由两部分组成:- 应用程序的 包名(例如
com.android.gallery3d
)。 - 你想要启动的活动的 完整类名(例如
.app.GalleryActivity
)。
- 应用程序的 包名(例如
组件名称的格式为 package_name/.ActivityName
。
使用示例
启动图库应用的主活动:
adb shell am start -n com.android.gallery3d/.app.GalleryActivity
adb shell
: 在设备上打开一个命令行界面。am start -n
: 启动指定的活动。com.android.gallery3d/.app.GalleryActivity
: 指定要启动的包名和活动。
其他选项
--display <display_id>
: 如果设备有多个显示屏,可以指定使用哪个显示屏。-d 
: 指定一个数据 URI(例如文件路径或网页链接),活动在启动时可以使用这个 URI。-a <action>
: 指定要执行的操作,例如android.intent.action.VIEW
。
实际示例
如果你想在显示屏 3 上打开图库应用中的特定图片:
adb shell am start -n com.android.gallery3d/.app.GalleryActivity --display 3
这个命令将在显示屏 3 上打开图库应用的 GalleryActivity
。
如何获取 package_name 以及 activity_name
pm list packages
命令获取当前系统中的所有 package。
130|console:/ # pm list packages
......
package:com.android.internal.systemui.navbar.gestural
package:com.android.gallery3d
package:com.android.providers.userdictionary
......
以 gallery3d com.android.gallery3d
为例:
console:/ # dumpsys package com.android.gallery3d | grep -A 1 'MAIN'
android.intent.action.MAIN:[ 1080.400705] servicemanager: Since 'artd' could not be found, trying to start it as a lazy AIDL service. (if it's not configured to be a lazy service, it may be stuck starting or still starting).
c99ebe com.android.gallery3d/.app.GalleryActivity filter 92aab1f
Action: "android.intent.action.MAIN"
Category: "android.intent.category.DEFAULT"
--
Action: "android.intent.action.MAIN"
be96ced com.andro[ 1080.418995] init: starting service 'artd'...
id.gallery3d/.app.Gallery filter de1c722
Action: "android.intent.action.MAIN"
Category: "android.intent.category.DEFAULT"
--
Action: "android.intent.action.MAIN"
Category: "android.intent.category.DEFAULT"
--
[ 1080.446599] init: ... started service 'artd' has pid 2312
[ 1080.458298] BpBinder: onLastStrongRef automatically unlinking death recipients:
privateFlags=[ PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE HAS_DOMAIN_URLS PRODUCT PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING ]
forceQueryable=false
--
privatePkgFlags=[ PRI[ 1080.472553] init: Control message: Processed ctl.interface_start for 'aidl/artd' from pid: 248 (/system/bin/servicemanager)
VATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE HAS_DOMAIN_URLS PRODUCT PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING ]
apexModuleName=null
关键信息:c99ebe com.android.gallery3d/.app.GalleryActivity filter 92aab1f
对应的 package and activity name 组合:com.android.gallery3d/.app.GalleryActivity
套用到 am 命令中就是:
am start -n com.android.gallery3d/.app.GalleryActivity --display 3