Appium 获取 appActivity

kingTester · 2017年09月18日 · 最后由 杀手carry 回复于 2017年09月21日 · 3520 次阅读

有时候在 appium 的 Desired Capabilities 中需要指定被测 app 的 appActivity,下面的方法可能会对你有所帮助。

方法一

如有你有待测项目的源码,那么直接查看源码就好。如果没有,那么请联系有源码的同学,这是推荐方法。

方法二

如果你没有代码,那么可以反编译该 app。

这里将用到 2 个工具,分别是 dex2jar 和 jd-gui。你可以在这里下载目前为止的最新版本以及示例 apk。

我们以工具包里的 ContactManager.apk 为例,简单介绍一下反编译的流程。

1,重命名 ContactManager.apk 为 ContactManager.zip 并解压得到文件 classes.dex;
2,解压 dex2jar-0.0.9.15.zip,并从命令行进入该文件夹;
3,运行命令
d2j-dex2jar.bat path_to\classes.dex 在当前文件夹下得到 classes-dex2jar.jar;
4,解压 jd-gui-0.3.6.windows.zip 得到文件 jd-gui.exe;
5,使用 jd-gui.exe 打开 classes-dex2jar.jar;

上图所示的 ContactManager 就是待测 app 的 main activity。

方法三

使用 log 查看大法 (嗯,windows 上没 grep 不幸福,好在有 powershell 的 Select-String,可以拿来勉强一用),直接搬砖。

a、启动待测 apk
b、开启日志输出:adb logcat>D:/log.txt
c、关闭日志输出:ctrl+c
d、查看日志
找寻:

Displayed com.mm.android.hsy/.ui.LoginActivity: +3s859ms
appPackage = com.mm.android.hsy
appActivity = .ui.LoginActivity

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 14 条回复 时间 点赞

我觉得用 aapt dump badging 最方便

麻烦,直接给你一串 adb shell 脚本搞定,在你启动 app 期间,运行此命令:
adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p' | awk 'NR==3{print}' | awk '{print $5}'
以 testerHome 举例

最简单的方式,adb shell dumpsys activity top | grep ACTIVITY,可以获取当前页面的 activity 名。

—— 来自 TesterHome 官方 安卓客户端

最简单的方式,adb shell dumpsys activity top | grep ACTIVITY,可以获取当前页面的 activity 名。

—— 来自 TesterHome 官方 安卓客户端

CC 回复

据我所知 running activity 并不一定就是 launchable activity👀
个人觉得还是用 aapt 靠谱方便

bauul 回复

嗯~我们公司这边用的是原生安卓,所以不用过多纠结,适用就好😀 ,刚看了你的博客,开发转测试工具开发啦?

CC 回复

嗯嗯,以前功能测试,然后自动化测试,现在在做测试开发,😀

上面的两位同学很对,静态用 aapt,动态用 adb。都挺准确的。分享使人进步,楼主加油

一直用 aapt 用起来也不麻烦

匿名 #4 · 2017年09月19日

用 aapt 吧,靠谱点
之前一个应用用 aapt 获取到的和 adb shell dumpsys activity top | grep ACTIVITY 获取到的就不一致,搞了个乌龙

格式我动了一下,# 后面要加一个空格😀

最最最最最简单的方法是用客户端 appium 获取 apk,然后 package 跟 activity 就都有了

最简单的方式,adb shell dumpsys activity top | grep ACTIVITY,可以获取当前页面的 activity 名。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册