什么?adb命令也分入门和进阶?工作5年必须要了解的adb命令

adb命令是android开发中必不可少的部分,有了它们,我们干活会更高效,更得心应手。

目前网络上adb命令大多是简单的罗列和整合,一大堆的东西塞到一起,没有条理不够清晰。

这次就让我们来点不一样的。

对于新手来说会使用一些常见的adb命令,比如

adb connect xxxx(IP地址) 连接设备

adb devices查看连接的设备

adb install xxx.apk安装应用

adb push xxx(本地文件路径) xxx(目标设备文件路径) 推送文件

adb pull xxx(目标设备文件路径) xxx(本地文件路径) 拉取文件

。。。

这些都是一些日常操作,可能对于新手足够了,但对于工作了5年以上的老鸟来说,你对adb命令的了解需要更近一步。

实际上,我们可以发现,稍微复杂点的命令在adb后都会带有shell这个单词,shell就是Linux下的命令行,常见的比如ls,cd,chmod等等都是完全和Linux一样的。在shell 后面时常会跟着android特有的一些命令,基本上可以分为这4大块,当然还有很多其它的。

1.Activity管理器 (am)

执行各种系统操作,如启动 Activity、强行停止进程、广播 intent等等

2.软件包管理器(pm)

对设备上安装的应用执行操作和查询

3.窗口管理器(wm)

修改设备屏幕属性等

4.设备政策管理器(dpm)

使用该工具可控制活动管理应用,或更改设备上的政策状态数据

下面我将针对部分使用场景列出一部分,后续如果有时间还会持续补充

一.UI相关

Android开发,UI做为"门面"必不可少,可以说是我们打交道最多的东西了。

各种酷炫的页面对程序的流畅性和稳定性都提出了要求,我们来看看有哪些相关的命令

1.更改分辨率和dpi

adb shell wm size 1920x1080 //分辨率

adb shell wm density 320 //(dpi)

adb shell wm size reset恢复

adb shell wm density reset恢复

这个我感觉很实用,有时候你手头只有有限的设备,或者不想再多开个模拟器,那么用这个命令去模拟就再方便不过了。

2.查看Activity的任务栈

adb shell dumpsys activity activities //查看所有的activity

adb shell dumpsys activity | findstr “yourActivity” //查看你的activity

在开发中,经常会碰到多个activity跳转的场景,用以上命令查看当前Activity的情况,及时发现重复创建等异常情况。

3.查看各阶段发生的动画以及帧相关的性能信息

adb shell dumpsys gfxinfo 包名

关于查看/分析UI性能的办法有很多,使用Systrace分析UI性能,打开开发者模式里的过度重绘、GPU呈现模式分析都是可行的,也可以通过这个命令去更精确的定位分析。

UI性能

4.启动时间

adb shell am start -W 包名/Activity全类名

会返回三个值ThisTime,TotalTime,WaitTime,具体差别可以自行百度,注意这里的activity必须是LAUNCHER型的,通常我们也可以在各自的页面进行埋点来查看启动速度。

5.UI的绘制/显示和内存息息相关,这一部分我们整合到下面的章节内存中

二.内存相关

1.查看系统/进程内存占用,并排序

adb shell su (需要赋予超级权限,否则可能报错)

procrank -p (按pss排序,也可以按其它列进行排序,换成对应的首字母就行)

procrank 命令查看内存 从图中可以看出各个应用(进程)占用内存的情况, 至于这四列,Vss,Rss,Pss,Uss含义及差别,我们可以参考这篇文章 https://www.jianshu.com/p/3bab26d25d2e。通常关注下Pss或者Uss就可以了。

2.查看系统整体内存情况:

adb shell cat /proc/meminfo

在这里插入图片描述

这个命令从系统层出发,展示了系统的内存状况,有很多项,一般我们关注MemFree 和 MemAvailable即可,如果这两个其中有一个逐渐减小,就要警惕内存问题了,当available只有100M左右,那么极易发生OOM(视系统版本而定)

3.查看某个应用的内存

adb shell dumpsys meminfo 包名

在这里插入图片描述

dumpsys 查看应用内存
这个命令详细展示了应用的各个方面,包括内存使用大小,创建了多少个对象(有多少个view,多少个webview,这里要特别注意下,如果view的数量过多,且没有过段时间没有回落,要注意是否重复创建或者销毁不彻底,避免内存泄漏),以及数据库的大小及名称。可以说非常全了。

4.monkey测试

adb shell monkey -p 包名 -v 10000 (有很多参数,这里省略)

用于稳定性测试,相信大家都很熟悉了,就不做过多介绍了。有两点需要注意下,

(1)设备状态栏是否隐藏?如果没隐藏的话可能会点到home键或者back键

(2)脚本里是否包含一些退出,返回的命令?

这两点都可能会造成程序退出,测试中断的情况。

三. 数据库相关

数据库操作也是android开发中必不可少的一部分。但它不像是mySQL,oracle一样,有丰富的图形化操作页面,至少原生的as没有这些,除非下载三方软件/插件。其实直接用adb也能实现数据库的常见操作。

有两点要注意

1.db可能没有读写权限 要chmod 777 给与权限

2.sql语句后要有分号断句

adb shell

su(赋予超级权限)

cd /data/data/包名/databases (进入数据库目录)

ls (查看此目录里有哪些数据库)

chmod 777 test.db (给数据库赋予读写权限)

sqlite3 test.db (使用sqlite3打开(链接)数据库),如果成功,会有如下输出:

SQLite version 3.9.2 2015-11-02 18:31:45

Enter “.help” for usage hints.

sqlite> .tables(输入.tables查看表名)

sqlite>select * from testTable;(执行SQL语句)

更多相关知识可以查阅官方手册:

https://www.sqlite.org/cli.html

四.日志相关

设备里会记录各种各样的日志,除了我们应用层的,还有native层、内核层的,这些日志可以帮助我们更好的分析定位问题。

1.导出anr日志

adb pull data/anr/traces.txt anr.txt

2.导出logcat日志

adb logcat –d main time > c:\appLog.txt

此命令会导出带时间的Java层debug信息(具体可百度adb logcat)

3.查看linux 系统内核(启动)日志

adb shell dmesg >dmesg.txt

有时候会去查询一些系统级别的日志,比如一些设备异常重启,那么可能就要去内核日志里

看看是什么导致的,关键字可以搜索reboot,shutdown,halt之类的,说不定会有一些发现。

看到这里大家是不是对adb有了新的认识呢?恭喜你已经告别入门,走向更高的台阶了!

更多关于adb的知识,大家可参考谷歌官方的开发手册(需要科学上网)

https://developer.android.com/studio/command-line/adb

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值