启动命令
一 常规命令 + 包名/activity
adb shell am start -n package/launch activity
说明:package 是app的包名(android studio一般是gradle中的applicationId的值) launch activity 是启动activity的完整路径(如果和package重叠的话,可简写)
例如: applicationId:com.eagle.game 启动activity完整的路径是com.eagle.game.ui.StartActivity
具体的命令为:
adb shell am start -n com.eagle.game/com.eagle.game.ui.StartActivity
或
adb shell am start -n com.eagle.game/.ui.StartActivity
注意:包名和activity之间是有斜线,简写时注意斜线后的点。
输出:
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.eagle.game/.ui.StartActivity }
代表启动成功
二 常规命令 + 包名
adb shell am start -n package
这种命令需app的启动activity的intent-filter中配置属性: <category android:name=“android.intent.category.DEFAULT”/>
即:
<activity
android:name=".ui.StartActivity"
android:banner="@drawable/gs_ic_launcher"
android:icon="@drawable/gs_ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppWelcome"
android:logo="@drawable/gs_ic_launcher"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
但为了app的安全以及合规,一般是app是不会配置的。
命令关闭App
- cmd命令行中执行 adb shell am force-stop app包名
例如:adb shell am force-stop com.eagle.game
- cmd命令行中执行 adb shell pm clear app包名
例如:adb shell pm clear com.eagle.game
获取包名和activity的路径
回到第一种命令,关键是包名和actvity的路径,怎么获取呢
代码获取
从开发者处获取,gradle中的applicationId就是包名,从AndroidManifest.xml里面获取包名和启动的activty路径。
1 命令获取( 需要app运行在前台,停留在启动界面)
打开App,在cmd窗口中输入以下命令。
adb shell dumpsys window windows | findstr “Current”
如下图所示,/之前的就是package,之后的就是当前的activity, 有些应用启动时包含了欢迎页之类的,打开App的时候就自动切换了activity,那用这种方法就获取不了需要的activity。
C:\Users\Administrator>adb shell dumpsys window windows | findstr “Current” mCurrentFocus=Window{64177ed u0 com.eagle.game/com.eagle.game.ui.StartActivity}
2命令获取(先执行命令,再点击app启动)
先输入:adb shell 回车
再输入:logcat | grep -i ActivityManager
启动app。
注意留意输出内容,可能刷得比较快。
在log中“ ActivityManager: START”之后的部分就含有am 命令需要的package和launch activity。如:
2129 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 hwFlg=0x10 cmp=com.eagle.game/.ui.StartActivity bnds=[288,396][540,690]} from uid 10063
中的com.eagle.game/.ui.StartActivity
命令获取都需要先启动app,这种情况下,实际上也用不着通过命令去启动。一般那种定制系统,如电视盒子,定制的平板手机,大屏一体机,没有列出某些app,无法通过桌面启动,在测试其他厂商的app的情况下可能需要通过命令去启动。 这种情况下可以先用手机启动后获取到包名和activity,再在定制系统中去用adb启动。
说明:本文是的实例是在windows 7 上进行的。
|