获取android appActivity的四种常用方法

2025-06-23 21:13:59

=========不积跬步无以至千里==========

在进行Android的app UI自动化时,从Appium启动制定package是通过获取指定的android activity实现的,那么如何获取目标Activity就成为了启动一个Appium Session的第一步,先总结方法如下:

方法一 从Appium指定安装包

这个方法为最简单粗暴,即下载好了待测package后,在appium的capability中添加待测包的位置,点击start session后,直接从appium-desktop的log window中能看到所有的操作信息,可直接定位到启动对应的android activity。

例如在以下appium capability中指定了app的path,那么appium会自动给Android device安装指定的package并且把相应的操作都通过控制台输出

{

"platformName": "Android",

"platformVersion": "6.0",

"deviceName": "Android Emulator",

"automationName": "Appium",

"app": "/Users/cosetteqi/Downloads/llsstaging60.apk",

"noReset": true,

"autoGrantPermissions": true,

"udid": "192.168.56.101:5555"

}

Appium日志定位到的Activity

那么之后通过Appium直接启动package而不需重新安装时,直接指定appActivity即可,capability可设置如下:

{

"platformName": "Android",

"platformVersion": "6.0",

"deviceName": "1111111",

"automationName": "Appium",

"appPackage": "com.target.engzo",

"appActivity": ".app.activity.LauncherActivity",

"noReset": true,

"autoGrantPermissions": true

}

方法二 使用dumpsys命令

应用此方法首先要明确待测package的package name,可通过如下命令获取:

#查看当前device中所有apk对应的package name和path

adb shell pm list package -f

#仅查看第三方的apk package

adb shell pm list package -3 -f

明确了待测包的package name后,即可使用dumpsys命令获取要抓取的appActivity

注意:cmd terminal的查找命令在linux和mac操作系统中对应关键字时grep,在Windows操作系统中对应关键字是 findstr

比如我要获取WeChat的appActivity,第一步我需要打开WeChat,打开后在terminal中输入以下信息:

adb shell dumpsys window w | grep mCurrent

对应定位到的appActivity就会自动被定位到并输出如下:

mCurrentFocus=Window{bfcb871 u0 com.tencent.mm/com.tencent.mm.ui.LauncherUI}

方法三 使用logcat日志筛选

在terminal中输入以下cmd,然后对待测package进行具体的操作,此命令是能够实时获取appActivity的

adb logcat ActivityManager:I *:s

Cosette:~ cosetteqi$ adb logcat ActivityManager:I *:s

--------- beginning of system

--------- beginning of main

01-23 14:18:07.737 1075 1243 I ActivityManager: [Background Service Priority Adjustment] Set callerFg as false for service.getFlags():292

01-23 14:19:17.163 1075 2071 I ActivityManager: moveTaskToBack: TaskRecord{e0cd18d #22922 A=com.tencent.mm U=0 sz=1}

01-23 14:19:18.623 1075 1389 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.tencent.mm/.ui.LauncherUI bnds=[282,960][540,1248]} from uid 10014 from pid 2100 on display 0 from pid 2100 cloneId 0

01-23 14:19:25.214 1075 1090 I ActivityManager: START u0 {cmp=com.tencent.mm/.plugin.appbrand.ui.AppBrandLauncherUI (has extras)} from uid 11126 from pid 13530 on display 0 from pid 13530 cloneId 0

01-23 14:19:26.134 1075 1123 I ActivityManager: [AppLaunch] Displayed Displayed com.tencent.mm/.plugin.appbrand.ui.AppBrandLauncherUI: +867ms

01-23 14:19:34.777 1075 1931 I ActivityManager: START u0 {cmp=com.tencent.mm/.plugin.scanner.ui.BaseScanUI (has extras)} from uid 11126 from pid 13530 on display 0 from pid 13530 cloneId 0

01-23 14:19:35.925 1075 1123 I ActivityManager: [AppLaunch] Displayed Displayed com.tencent.mm/.plugin.scanner.ui.BaseScanUI: +1s93ms

方法四 使用dumpsys activity直接进行查找

首先启动待测的package,输入以下cmd

adb shell dumpsys activity | grep mFocusedActivity

此命令能够直接定位到最后一个被执行的Activity,然后直接将此Activity的信息返回到terminal

mFocusedActivity: ActivityRecord{15e435f u0 com.tencent.mm/.ui.LauncherUI t22922}

以上四种方法都可用于查找定位appActivity,当然还有其他的方法也可以实现,具体的选择要根据个人使用习惯来确定使用哪种方法了。

===========每日有输入,每日有输出==============