在不知道 Activity 名称的情况下通过 adb 启动应用程序

Launch App via adb without knowing Activity name

从 post Is it possible to start activity through adb shell?,我们可以通过

通过 adb 启动一个 Android 应用程序
adb shell am start -n yourpackagename/.activityname

但是是否可以在不知道 Activity 名称的情况下通过 adb 启动 Android 应用程序?例如,通过将 android.intent.action.MAIN 意图发送到一个包?也许是这样的命令:

adb shell am start -a android.intent.action.MAIN -n packageName

谢谢!!

-宇宙

是的,可以使用 monkey 工具通过 adb shell 启动应用程序。

使用来自 this answer 的命令:

adb shell monkey -p app.package.name -c android.intent.category.LAUNCHER 1

此命令模拟应用程序图标点击,因此隐式意图 LAUNCHER 传递给应用程序清单 (MAIN) 中声明的特定接收器

使用最新版本(至少 API 25)您可以启动默认 Activity,而无需知道其名称,并且不使用 monkey:

PKG=com.android.calculator2
adb shell am start $PKG/$(adb shell cmd package resolve-activity -c android.intent.category.LAUNCHER $PKG | sed -n '/name=/s/^.*name=//p')

如果您有 apk 文件,您可以使用 droidbot.

安装并启动应用程序
> droidbot -d emulator-5554 -a <xxx.apk> -install_app -policy none -count 0

DroidBot基于adb,但它使用静态分析自动提取Activity名称。