Launch App via adb without knowing Activity name [

2019-03-08 01:54发布

问题:

This question already has an answer here:

  • How to start an application using android ADB tools? 11 answers

From the post Is it possible to start activity through adb shell?, we can start an Android app via adb by

adb shell am start -n yourpackagename/.activityname

But is it possible to start an Android app via adb without knowing the Activity name? For example, by sending the android.intent.action.MAIN intent to a package? Maybe some command like this:

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

Thanks!!

-Cosmo

回答1:

Yes, it is possible to launch an app via adb shell making use of the monkey tool.

Using the command from this answer:

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

This command simulates the app icon click, so the intent implicit intent LAUNCHER is delivered to the specific receiver declared in app manifest (MAIN)



回答2:

Using latest versions (at least API 25) you can start the default Activity, without knowing its name, and not using 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')


回答3:

If you have the apk file, you can install and start the app using droidbot.

> droidbot -d emulator-5554 -a <xxx.apk> -install_app -policy none -count 0

DroidBot is based on adb, but it uses static analysis to extract the Activity name automatically.