『与善仁』Appium基础 — 5、常用ADB命令(二)
9、查看手机运行日志
ADB命令:adb logcat
只要对Android手机/模拟器的操作,都会记录到日志中。
Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg
,Android 的日志输出到 /dev/log
。
(1)Android 日志
命令格式:
[adb] logcat [<option>] ... [<filter-spec>] ...
常用用法列举如下:
(2)按级别过滤日志
Android 的日志分为如下几个优先级(priority
):
V
:Verbose
(最低,输出得最多)D
:Debug
I
:Info
W
:Warning
E
:Error
F
:Fatal
S
:Silent
(最高,啥也不输出)
按某级别过滤日志则会将该级别及以上的日志输出。
比如,命令:
adb logcat *:W
会将 Warning
、Error
、Fatal
和 Silent
日志输出。
注: 在 macOS 下需要给
*:W
这样以*
作为tag
的参数加双引号,如adb logcat "*:W"
,不然会报错no matches found: *:W
。)
(3)按 tag 和级别过滤日志
<filter-spec>
可以由多个 <tag>[:priority]
组成。
比如,命令:
adb logcat ActivityManager:I MyApp:D *:S
表示输出 tag
为 ActivityManager
的 Info 以上级别日志,输出 tag
为 MyApp
的 Debug
以上级别日志,及其它 tag
的 Silent
级别日志(即屏蔽其它 tag
日志)。
(4)日志格式
可以用 adb logcat -v <format>
选项指定日志输出格式。
日志支持按以下几种 <format>
:
brief
默认格式,格式为:<priority>/<tag>(<pid>): <message>
示例:
D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
process
格式为:<priority>(<pid>) <message>
示例:
D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)
tag
格式为:<priority>/<tag>: <message>
示例:
D/HeadsetStateMachine: Disconnected process message: 10, size: 0
raw
格式为:<message>
示例:
Disconnected process message: 10, size: 0
time
格式为:<datetime> <priority>/<tag>(<pid>): <message>
示例:
08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
threadtime
格式为:<datetime> <pid> <tid> <priority> <tag>: <message>
示例:
08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
long
格式为:[ <datetime> <pid>:<tid> <priority>/<tag> ]
<message>
示例:
[ 08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine ]
Disconnected process message: 10, size: 0
指定格式可与上面的过滤同时使用。比如:
adb logcat -v long ActivityManager:I *:S
(5)清空日志
命令如下:
adb logcat -c
10、获取APP的包名和启动名
执行APP自动化测试之前,必须要获取所测试APP的appPackage
(包名)和appActivity
(启动名),之后将这两个值填写到脚本指定参数里,来告诉要执行的是哪个APP。
appPackage
(包名):决定程序的唯一性(不是应用的名字)。APP的包名是看不到的,需要执行命令才能查看得到的。
appActivity
(启动名):目前可以理解为一个启动名对应一个页面。
APP的包名和启动名获取方式有很多(任选其一即可):
方式一:
先在设备里打开要获取的App。
输入命令 adb shell dumpsys window windows | findstr mFocusedApp
例如:淘宝APP,如下所示:
# 链接逍遥模拟器
C:\Users\L>adb connect 127.0.0.1:21503
adb server version (31) doesn't match this client (41); killing...
* daemon started successfully
connected to 127.0.0.1:21503
# 获取淘宝App首页的包名和启动名
C:\Users\L>adb shell dumpsys window windows | findstr mFocusedApp
mFocusedApp=AppWindowToken{1554db9 token=Token{a292380 ActivityRecord{9c92803 u0 com.taobao.taobao/com.taobao.tao.TBMainActivity t16}}}
C:\Users\L>
我们从上面可以看出,淘宝APP的:
appPackage
为:com.taobao.taobao
appActivity
为:com.taobao.tao.TBMainActivity
当我们点击淘宝APP淘宝首页中的天猫国际,再次获取淘宝APP的包名和启动名。
C:\Users\L>adb shell dumpsys window windows | findstr mFocusedApp
mFocusedApp=AppWindowToken{f99dcd9 token=Token{8b7fb20 ActivityRecord{ab41a23 u0 com.taobao.taobao/com.taobao.browser.BrowserActivity t16}}}
C:\Users\L>
我们从上面可以看出,淘宝APP的:
appPackage
为:com.taobao.taobao
appActivity
为:com.taobao.browser.BrowserActivity
提示:斜杠前面的内容是包名,斜杠后面的内容是启动名。
方式二:
通过.apk
程序文件来获取appPackage
和appActivity
。
也就是获取在电脑上的apk
的包名/启动名,此时还没有安装在设备上。
步骤1:
命令行进入Android SDK
目录下aapt.exe
程序所在的目录里。
如图所示:
步骤2:
输入命令 aapt dump badging <path_to_apk>
示例:
进入aapt.exe
程序所在的目录,在地址栏中输入cmd
,按下回车,进入命令行终端。
回车后进入命令行终端,如下图:
输入aapt dump badging + apk路径
命令
F:\DevInstall\envs\android-sdk-windows\build-tools\25.0.3>aapt dump badging C:\Users\L\Desktop\com.taobao.taobao_V9.15.0.apk
执行该命令会有很多内容,其中
package: name='com.taobao.taobao'
为该app的包名信息。launchable-activity: name='com.taobao.tao.welcome.Welcome'
为该APP的启动页的信息。(和上边一种方式是有区别的)
提示:
APP的启动名和启动页的区别
启动名指的是当前启动页面的名字,启动页是一个APP的欢迎页面被启动,
所以说启动名包含启动页。
11、获取APP启动时间
ADB命令:adb shell am start -W 包名/启动名
示例:
# 链接逍遥模拟器
C:\Users\L>adb connect 127.0.0.1:21503
adb server version (31) doesn't match this client (41); killing...
* daemon started successfully
connected to 127.0.0.1:21503
C:\Users\L>
# 获取淘宝App首页的包名和启动名
C:\Users\L>adb shell dumpsys window windows | findstr mFocusedApp
mFocusedApp=AppWindowToken{48d0f7f token=Token{a1f589e ActivityRecord{f5ca6d9 u0 com.taobao.taobao/com.taobao.tao.TBMainActivity t17}}}
C:\Users\L>
# 获取淘宝app启动时间
# 包名:com.taobao.taobao
# 启动名:com.taobao.tao.TBMainActivity
C:\Users\L>adb shell am start -W com.taobao.taobao/com.taobao.tao.TBMainActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.taobao.taobao/com.taobao.tao.TBMainActivity }
Warning: Activity not started, its current task has been brought to the front
Status: ok
Activity: com.taobao.taobao/com.taobao.tao.TBMainActivity
ThisTime: 0
TotalTime: 0
WaitTime: 3
Complete
C:\Users\L>
解释:这里有三个时间
TotalTime
:APP自身启动时间。WaitTime
:系统启动应用时间(也就是系统启动应用耗时)。ThisTime
:APP中启动页打开的时间。三者之间的关系:
WaitTime = TotalTime + ThisTime
12、查看内存信息
ADB命令:adb shell dumpsys meminfo <package_name>
其中,package_name
也可以换成程序的pid
,pid
可以通过 adb shell top | grep app_name
命令来查找。
演示命令:
C:\Users\L>adb shell dumpsys meminfo com.taobao.taobao
Applications Memory Usage (in Kilobytes):
Uptime: 904975 Realtime: 904975
** MEMINFO in pid 1413 [com.taobao.taobao] **
Pss Private Private Swap Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 0 0 0 0 80384 65337 15046
Dalvik Heap 56525 56392 0 0 63014 46630 16384
Dalvik Other 9119 9116 0 0
Stack 2680 2680 0 0
Ashmem 344 4 0 0
Other dev 26 0 24 0
.so mmap 21428 3644 9028 0
.apk mmap 2090 0 704 0
.ttf mmap 176 0 24 0
.dex mmap 46945 16 18444 0
.oat mmap 6123 0 848 0
.art mmap 2685 2252 0 0
Other mmap 4808 16 2288 0
Unknown 77191 77120 0 0
TOTAL 230140 151240 31360 0 143398 111967 31430
...省略后边内容...
提示:
在命令行窗口运行上述命令,得到程序的内存情况信息如下说明:主要看:
Native/Dalvik
的 Heap 信息。
具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。- Total 的 PSS 信息。
这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。总结:也就是看前两行,前两列就行。
『与善仁』Appium基础 — 5、常用ADB命令(二)的更多相关文章
- 『与善仁』Appium基础 — 3、ADB命令介绍
目录 1.ADB命令简介 2.ADB命令运行原理 3.通过ADB命令连接安卓模拟器 (1)安装安卓模拟器 (2)ADB命令连接安卓模拟器 (3)常用Android模拟器端口号 1.ADB命令简介 AD ...
- 『与善仁』Appium基础 — 7、ADB Shell命令的使用
目录 1.查看进程 2.查看实时资源占用情况 3.查看进程 UID 4.其它ADB Shell命令说明 Android系统是基于 Linux 内核的,也就是说Android系统的底层是Linux系统. ...
- 『与善仁』Appium基础 — 8、Appium自动化测试框架介绍
目录 1.主流的移动端自动化测试框架 (1)Robotium (2)Macaca (3)Appium 2.自动化测试工具的选择 3.Appium简介 提示:我们前面说的Android环境搭建和adb命 ...
- 『与善仁』Appium基础 — 12、Appium的安装详解
目录 (一)Appium server安装 方式一:(桌面方式:推荐) 1.Appium Desktop下载 2.Appium Desktop安装 3.Appium Desktop使用 方式二:(No ...
- 『与善仁』Appium基础 — 15、使用Appium的第一个Demo
我们使用Python语言作为测试脚本的编写语言. 执行脚本前提: Android模拟器或者手机是开机状态. 使用确保电脑和Android设备进行了链接. 也就是使用ADB命令adb connect链接 ...
- 『与善仁』Appium基础 — 16、APPium基础操作API
目录 1.前置代码 2.安装和卸载APP 3.判断APP是否已安装 4.关闭APP软件和关闭驱动对象 5.发送文件到手机和获取手机中的文件 6.获取当前屏幕内元素结构(重点) 7.脚本内启动其他APP ...
- 『与善仁』Appium基础 — 9、补充:C/S架构和B/S架构说明
目录 1.C/S架构和B/S架构概念 2.C/S结构与B/S架构的区别 3.C/S架构和B/S架构优点和缺点 (1)B/S模式的优点和缺点: (2)C/S模式的优点和缺点: 1.C/S架构和B/S架构 ...
- 『与善仁』Appium基础 — 10、Appium基本原理
目录 1.Appium自动化测试架构 2.Appium架构图 3.Session说明 4.Desired Capabilities说明 5.Appium Server说明 6.Appium Clien ...
- 『与善仁』Appium基础 — 14、Appium测试环境搭建
目录 1.Appium测试环境搭建整体思路 (1)Android测试环境搭建 (2)Appium测试环境搭建 (3)测试脚本语言的环境搭建 2.Appium在Android端和IOS端的工作流程 (1 ...
- 『与善仁』Appium基础 — 17、元素定位工具(一)
目录 1.uiautomatorviewer介绍 2.uiautomatorviewer工具打开方式 3.uiautomatorviewer布局介绍 4.uiautomatorviewer工具的使用 ...
随机推荐
- 自己实现一个Controller——终极型
经过前两篇的学习与实操,也大致掌握了一个k8s资源的Controller写法了,如有不熟,可回顾 自己实现一个Controller--标准型 自己实现一个Controller--精简型 但是目前也只能 ...
- TP5数据库数据变动日志记录设计
根据网友的设计进行了部分调整: 用户分为管理员admin表和用户user表 记录操作表数据 增删改: insert/delete/update <?php /** * OperateLog.ph ...
- EcShop首页显示特定分类的精品新品热销特价等推荐商品
EcShop首页显示特定分类的精品新品热销特价等推荐商品 很多大型的B2C商城都有特定分类专区,该分类下的[分类名称].[推荐子分类 或 推荐品牌].[大图片/推荐单品].[推荐商品].[促销商品]. ...
- Docker DevOps实战:GitLab+Jenkins(2)- CI/CD相关配置
Jenkins关联GitLab Gitlab仓库配置Webhooks 上传项目到GitLab,Jenkins构建
- win10系统显示此电脑
今天电脑开机后发现从任务栏进入"文件资源管理器",直接卡死,重启电脑也没有用. 我想到是不是从"此电脑"进入不会卡死,试了一下果真没有卡死. 使用win10系统 ...
- Centos 7 设置 SFTP
近期要给服务器设置一个SFTP用户,可以上传删除修改的SFTP,但是禁止该用户SSH登录.这里记录下来 先升级 来源: https://blog.csdn.net/fenglailea/article ...
- 鸿蒙内核源码分析(汇编汇总篇) | 所有的汇编代码都在这里 | 百篇博客分析OpenHarmony源码 | v40.03
百篇博客系列篇.本篇为: v40.xx 鸿蒙内核源码分析(汇编汇总篇) | 汇编可爱如邻家女孩 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪 ...
- 2017年第二届广东省强网杯线上赛WEB:Musee de X writeup(模板注入漏洞)
目录 解题思路 总结 解题思路 拿到手上,有四个页面 首先按照题目要求执行,尝试注册一个名为admin的账户 这种情况,路径都给出来了,很可能就是目录遍历或者文件上传了 回到初始界面,点击链接here ...
- Windows10 IIS Web服务器安装配置
前言: 对于.NET开发者而已,IIS Web托管服务器应该是十分的熟悉的.对于刚安装Windows10的系统的用户而已Internet Information Services(IIS)功能是默认关 ...
- 【MySQL】MySQL进阶(外键约束、多表查询、视图、备份与恢复)
约束 外键约束 外键约束概念 让表和表之间产生关系,从而保证数据的准确性! 建表时添加外键约束 为什么要有外键约束 -- 创建db2数据库 CREATE DATABASE db2; -- 使用db2数 ...