Android adb 启动APP

目录

  • 启动命令
    • 一 常规命令 + 包名/activity
    • 二 常规命令 + 包名
    • 命令关闭App
  • 获取包名和activity的路径
    • 代码获取
    • 1 命令获取( 需要app运行在前台,停留在启动界面)
    • 2命令获取(先执行命令,再点击app启动)

启动命令

一 常规命令 + 包名/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中配置属性:

即:

<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

  1. cmd命令行中执行 adb shell am force-stop app包名

例如:adb shell am force-stop com.eagle.game

  1. 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 上进行的。

你可能感兴趣的:(Android,Android,Studio,移动开发,android,adb,app,cmd,安卓)