什么?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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 1、日志相关: adb logcat //显示全部日志 adb logcat > c:\test.log //...
    学习不断阅读 58,891评论 0 11
  • 由于adb命令实在太多,网上搜索一大把,但是讲的都不是很详细,因工作需要所以打算自己整理一份出来,免得每次都去百度...
    大表哥007阅读 2,715评论 0 3
  • 1、日志相关: adb logcat //显示全部日志 adb logcat > c:\test.log ...
    後来的後来hugh阅读 882评论 0 0
  • adb进阶知识,如何过滤只查看某一个app的日志前面大概学习了adb基础,但是adb的存在,在测试人员中究竟有什么...
    一飞同学丶走慢点阅读 549评论 0 1
  • Tcp/IP通信也是不安全的,在传输的时候也可能出现漏洞 查看正在运行的进程 adb shell ps -A |g...
    远远飘着云阅读 3,924评论 0 0