『与善仁』Appium基础|『与善仁』Appium基础 — 5、常用ADB命令(二)
目录
- 9、查看手机运行日志
- (1)Android 日志
- (2)按级别过滤日志
- (3)按 tag 和级别过滤日志
- (4)日志格式
- (5)清空日志
- 10、获取APP的包名和启动名
- 方式一:
- 方式二:
- 11、获取APP启动时间
- 12、查看内存信息
9、查看手机运行日志 ADB命令:
adb logcat
只要对Android手机/模拟器的操作,都会记录到日志中。
Android 系统的日志分为两部分,底层的 Linux 内核日志输出到
/proc/kmsg
,Android 的日志输出到 /dev/log
。(1)Android 日志
命令格式:
[adb] logcat [
常用用法列举如下:
(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 下需要给(3)按 tag 和级别过滤日志*:W
这样以*
作为tag
的参数加双引号,如adb logcat "*:W"
,不然会报错no matches found: *:W
。)
可以由多个 [:priority]
组成。比如,命令:
adb logcat ActivityManager:I MyApp:D *:S
表示输出
tag
为 ActivityManager
的 Info 以上级别日志,输出 tag
为 MyApp
的 Debug
以上级别日志,及其它 tag
的 Silent
级别日志(即屏蔽其它 tag
日志)。(4)日志格式
可以用
adb logcat -v
选项指定日志输出格式。日志支持按以下几种
:brief
默认格式,格式为:/
():
示例:D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
process
格式为:()
示例:D( 1785) Disconnected process message: 10, size: 0(HeadsetStateMachine)
tag
格式为:/
:
示例:D/HeadsetStateMachine: Disconnected process message: 10, size: 0
raw
格式为:
示例:Disconnected process message: 10, size: 0
time
格式为:/ ():
示例:08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
threadtime
格式为::
示例:08-28 22:39:39.97417851832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
long
格式为:[
: / ]
示例:[ 08-28 22:39:39.9741785: 1832 D/HeadsetStateMachine ] Disconnected process message: 10, size: 0
指定格式可与上面的过滤同时使用。比如:adb logcat -v long ActivityManager:I *:S
命令如下:
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
示例:
进入
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的启动页的信息。(和上边一种方式是有区别的)
提示:11、获取APP启动时间 ADB命令:
APP的启动名和启动页的区别
启动名指的是当前启动页面的名字,启动页是一个APP的欢迎页面被启动,
所以说启动名包含启动页。
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:21503C:\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
CompleteC:\Users\L>
解释:这里有三个时间12、查看内存信息 ADB命令:
三者之间的关系:
TotalTime
:APP自身启动时间。WaitTime
:系统启动应用时间(也就是系统启动应用耗时)。ThisTime
:APP中启动页打开的时间。WaitTime = TotalTime + ThisTime
adb shell dumpsys meminfo
其中,
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] **
PssPrivatePrivateSwapHeapHeapHeap
TotalDirtyCleanDirtySizeAllocFree
------------------------------------------
Native Heap0000803846533715046
Dalvik Heap565255639200630144663016384
Dalvik Other9119911600
Stack2680268000
Ashmem344400
Other dev260240
.so mmap21428364490280
.apk mmap209007040
.ttf mmap1760240
.dex mmap4694516184440
.oat mmap612308480
.art mmap2685225200
Other mmap48081622880
Unknown771917712000
TOTAL23014015124031360014339811196731430...省略后边内容...
提示:
在命令行窗口运行上述命令,得到程序的内存情况信息如下说明:
主要看:
【『与善仁』Appium基础|『与善仁』Appium基础 — 5、常用ADB命令(二)】总结:也就是看前两行,前两列就行。
Native/Dalvik
的 Heap 信息。
具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。- Total 的 PSS 信息。
这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM
- 原生家庭之痛与超越