新年都过去了,我也该回来继续分享啦。很久没写自动化脚本,再拾起来,得学得更加透。
这次先分享下 获取包名和Activity的方法,这儿有自己实践过、总结的几种:

1. 包名-Python脚本中的appPackage

是拿网易云音乐来做例子,实际包名:com.netease.cloudmusic

1. 最简单-手机设置、正在运行服务【已安装】

查看包名 只需要进入 设置-更多应用-正在运行的服务(个别手机需要进入 开发者选项-正在运行的服务)-找到测试app


python 手机获取当前运行软件名称 python获取apk包名_appPackage

python 手机获取当前运行软件名称 python获取apk包名_python 手机获取当前运行软件名称_02

2. adb shell 的pm命令【已安装】

手机正常连接电脑后,直接在命令行界面输入:

adb shell pm list package

python 手机获取当前运行软件名称 python获取apk包名_appActivity_03

很多app的包名估计大家也很熟了,如上图 第一个百度网盘,第二个淘宝,倒数第三个支付宝,最后一个wps。

adb shell pm list package -3
参数-3:将获取手机内第三方apk对应的包名(不贴图啦)
3. 手机已root 可查看 /data/data/ 目录 【已安装】

手机在安装一款应用后,系统就会在 /data/data/ 目录下建一个目录,并且文件名就是当前这个应用的包名。

我手上的手机都没有root,没法提供成功的截图。

python 手机获取当前运行软件名称 python获取apk包名_appPackage_04

4. 其他工具:腾讯GT 【已安装】

GT是由腾讯无线研发部专项测试组研发的一款性能测试工具


python 手机获取当前运行软件名称 python获取apk包名_获取包名和Activity _05

5. uiautomatorviewer 【已安装】

元素定位一般都会用到uiautomatorviewer,其实也可以用它查看package(有时候也可以根据resource-id的属性值来判断)

python 手机获取当前运行软件名称 python获取apk包名_appActivity_06

6. logcat 抓取app日志 不推荐使用

抓取的日志搜索"package:" 有很多结果,是需要进行筛选的;
(此外搜索"cmp"会找到很多activity)

python 手机获取当前运行软件名称 python获取apk包名_包名_07

2. Activity-Python脚本中的appActivity

后面部分方法所得到的结果需要去掉斜杠,实际的Activity:com.netease.cloudmusic.activity.LoadingActivity

android.intent.action.MAIN 决定应用程序最先启动的Activity

android.intent.category.LAUNCHER 决定应用程序是否显示在程序列表里

1. Monkey测试

指定模拟随机事件为一次

python 手机获取当前运行软件名称 python获取apk包名_python 手机获取当前运行软件名称_08

2. dump package 获取安装包基本信息

python 手机获取当前运行软件名称 python获取apk包名_appActivity_09

3. dumpsys activity 信息查询

python 手机获取当前运行软件名称 python获取apk包名_appActivity_10


python 手机获取当前运行软件名称 python获取apk包名_获取包名和Activity _11


python 手机获取当前运行软件名称 python获取apk包名_包名_12

4. apktool 反编译

python 手机获取当前运行软件名称 python获取apk包名_appPackage_13

查看AndroidManifest.xml文件

python 手机获取当前运行软件名称 python获取apk包名_python 手机获取当前运行软件名称_14


python 手机获取当前运行软件名称 python获取apk包名_包名_15

5. 使用grep

grep:linux平台查找字符串命令,一般先adb shell 进入shell命令行再使用

logcat | grep START

python 手机获取当前运行软件名称 python获取apk包名_获取包名和Activity _16


logcat | grep cmp

python 手机获取当前运行软件名称 python获取apk包名_appPackage_17


adb logcat | findstr START

python 手机获取当前运行软件名称 python获取apk包名_包名_18

6. aapt(android asset packaging tool)

aapt 这个工具在 SDK 的 build-tools 目录下面;

aapt dump badging <file_path.apk>,可以查看apk包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息,即 Print the label and icon for the app declared in APK

python 手机获取当前运行软件名称 python获取apk包名_appActivity_19

可以找到 package: name=‘xxxx’

python 手机获取当前运行软件名称 python获取apk包名_获取包名和Activity _20

可以找到 launchable-activity: name=‘XXXX’

python 手机获取当前运行软件名称 python获取apk包名_appPackage_21

7. 不推荐使用

这种方法需要先打开应用,所以获得的activity极有可能不是入口Activity。

adb shell dumpsys activity | find “mFocusedActivity”
adb shell dumpsys window w | findstr / | findstr name=
adb shell dumpsys window |findstr mCurrent

python 手机获取当前运行软件名称 python获取apk包名_appPackage_22

实际脚本运行结果:

python 手机获取当前运行软件名称 python获取apk包名_appActivity_23


实际的报错原因:

Original error: Error occured while starting App. Original error: Permission to start activity denied.

python 手机获取当前运行软件名称 python获取apk包名_python 手机获取当前运行软件名称_24

其实方法千万种,掌握一种,学明白、用得上就够了。