Appium Android 获取包名和 Activity 的几种方法

Stepthen · June 30, 2017 · Last by liyj replied at January 10, 2019 · 5676 hits
本帖已被设为精华帖!

Guide

本文档主要记录“获取包名和 Activity 的方法”,用于自动化测试时启动APP。以下方法主要来源于网络和社区同学的贡献,特此感谢!

1. 方法一: pm list package查看包名

adb shell pm list package -f

将获取手机内所有apk对应的包名和路径

adb shell pm list package -3 -f   #获取第三方apk的包

2. 方法二:dumpsys window(本人最常用)

先打开需要查找的apk后,再敲入以上命令

adb shell dumpsys window w | findstr \/ | findstr name=

adb shell dumpsys window |findstr mCurrent

adb shell "dumpsys window w|grep \/|grep name=|sed 's/mSurface=Surface(name=//g'|sed 's/)//g'|sed 's/ //g'"

注:此处用sed 将部分字符串替换为空,格式为“sed 's/要被取代的字串/新的字串/g'”

3. 方法三:logcat日志抓取LAUNCHER

adb shell  logcat | grep android.intent.category.LAUNCHER "

adb logcat ActivityManager:I *:s

4. 方法四:dumpsys activity

先启动需要的查找的apk,再敲入以上命令

adb shell dumpsys activity | grep mFocusedActivity

5. 方法五:logcat日志抓START

C:\Users\Administrator>adb shell
root@msm8916_32_512:/ # logcat | grep START

先启动需要查找的apk,再敲入以上命令,找到最后一个ActivityManager

6. 方法六:aapt工具(推荐使用)

使用aapt工具 ,适合给程序自动获取 apk 的相关信息,非常实用,
//aapt是sdk自带的一个工具,在sdk\builds-tools\目录下
1.以微信为例,命令行中切换到aapt.exe目录执行输入以下命令

aapt dump badging D:\weixin658android1060.apk

2.运行后的结果中以下两行分别是应用包名package和入口activity名称,另外可看到应用使用的权限、支持的语言等信息

7. 方法七:apktool反编译app后查看AndroidManifest.xml

1.使用apktool反编译app

java -jar D:\Tools\apktool_2.2.3.jar d D:\Tools\weixin658android1060.apk

2.打开AndroidManifest.xml文件
manifest节点的package属性值是应用的包名:

查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,android.intent.action.MAIN决定应用程序最先启动的Activity,android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里

8. 方法八:使用monkey 命令查看Activity

adb shell monkey -p com.tencent.mm -c android.intent.category.LAUNCHER -v -v 0|findstr Using

注:
1. findstr 和 grep 查找字符串说明
findstr:windows平台查找字符串命令, 一般格式如下:

adb shell  xxx  | findstr xxx

grep:linux平台查找字符串命令,一般先adb shell 进入shell命令行再使用,也可直接使用,把shell 后面带grep的命令加双引号即可:

adb shell  "xxx  | grep xxx"

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 30 条回复 时间 点赞
思寒_seveniruby 将本帖设为了精华贴 01 Jul 02:18

我反倒最常用最后两种,aapt 适合给程序自动获取 apk 的相关信息,AndroidManifest 适合了解整个 app 的大致情况,例如用到什么权限、什么组件等。

也许和我平时需要拿 activity 信息的时候,都没有安卓机给我用有关,哈哈。

Stepthen #3 · July 01, 2017 作者
陈恒捷 回复

原来如此,改天我也试试看,👍

6最常用,另外,云测的公司是基于apk的解析的,底层用的是什么就不清楚了。

dump window | grep mCurrent 这个比较给力

有空我也总结一个

Stepthen #7 · July 01, 2017 作者

#5楼 @h470789634 ,是的,最简单明了

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

Stepthen #8 · July 01, 2017 作者
among 回复

嗯,刚才试了一下,还挺好用的,多谢提醒。

Stepthen #9 · July 02, 2017 作者
陈恒捷 回复

请教个问题,发帖时插入的图片默认是居中显示的,如何左对齐?

Stepthen 回复

这些都是日志和文字 直接贴上来就可以了,不用贴截图。

Stepthen #11 · July 02, 2017 作者

#10楼 @Lihuazhang ,感觉图片显示的格式更真实,有左对齐的功能吗,没有的话我抽时间再改成文字

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

Stepthen 回复

可以有……

补充一个本人最常用的,直接显示包名和activity ,

adb shell dumpsys activity | grep mFocusedActivity

另外楼主的Acitvity 打错了。

Stepthen #14 · July 03, 2017 作者
tester 回复

已修改,😂

恭喜楼主的帖子被公众号推了。
我也贡献个,以微信为例,其它应用替换包名:
adb shell
monkey -p com.tencent.mm -c android.intent.category.LAUNCHER -v -v 0|grep Using
打印出有launcher属性的activity,对已安装的应用有效。

不错不错,很实用。

手机自带busybox:
adb shell "dumpsys window w|grep \/|grep name=|busybox cut -d = -f 3|busybox cut -d ) -f 1"
系统不带busybox:
adb shell "dumpsys window w|grep \/|grep name=|sed 's/mSurface=Surface(name=//g'|sed 's/)//g'|sed 's/ //g'"
1,手机连接电脑,打开手机调试功能,并运行待测试APP,终端执行:

adb shell
2,接着,执行:

dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
直接查看输出结果中mFocusedApp的值,比如

mFocusedApp=AppWindowToken{372f88d6 token=Token{3b7b14f1 ActivityRecord{20692498 u0 com.tencent.mm/.ui.LauncherUI t895}}}
那么,以上两个参数appPackageappActivity的具体配置如下:

'appPackage': 'com.tencent.mm',
'appActivity': '.ui.LauncherUI',

我工作中会用adb logcat ActivityManager:I *:s这个命令,然后启动app。不过有时候内容会比较多😂 可以先清一波日志,然后再重复以上操作

Stepthen #20 · July 08, 2017 作者
mrleopard 回复

👍 ,从monkey的日志信息查看,这个方法很巧妙,一般人想不到哈

Stepthen #21 · July 08, 2017 作者
许伟栋 回复

嗯,也是个不错的方法,可以看到activity之间的切换。

Stepthen #22 · July 08, 2017 作者
E度丶塔罗 回复

@Edu_taluo ,多谢,又学了一个命令“sed”,😄 ,busybox 你们经常用吗,一般用于什么测试场景?貌似必须手机root才可以安装。

Stepthen 回复

如果要关注activity之间的切换,也可以用这条命令哦~adb logcat -v time -b events

Stepthen #24 · July 17, 2017 作者
cake 回复

好的,多谢提醒,👍

windows——cmd cd apk所在目录
aapt dump badging 包名.apk | findstr "package"
aapt dump badging 包名.apk | findstr "activity"

赞一个,以前只会傻傻的用apktool反编😂

非常专业

哈哈我有一个专门获取包名的app,我们开发给我打的包

沙子 获取 appActivity 中提及了此贴 18 Sep 17:49
小马 Maxim-高速 Android Monkey 工具使用记录 中提及了此贴 03 Feb 11:28
小马 monkeyTest 工具使用排坑记 中提及了此贴 05 Feb 15:13

好文章啊,很全,都是Windows下操作,666

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 13 Dec 20:49

哈哈,来个简单的包名查看方法:直接去 酷安APP查看,就好了

怎么获取当前页面的activity?

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up