android adb实用命令小结
adb对于Android程序员来说在日常的工作中使用频率很高,现将自己工作中常用的adb命令总结一下备忘,方便查询,也供大家参考。查看应用内存占用,耗电信息,启动时间,wakelock,跑monkey的命令在之前的应用性能优化中起了不小的作用。以下adb命令的测试机器为小米3,其中package_name代表包名。
基础脚本:
1、启动adb服务
adbstart-server
2、终止adb服务
adbkill-server
3、进入adb运行环境
adbshell
4、获取帮助里面有adb的各种命令和参数的介绍
adbhelp
5、查看adb版本
adbversion
6、以root权限重启adb
adbroot
7、将system分区重新挂在为可读写分区,此命令在操作系统目录时很重要
adbremount
8、重启设备,可选参数进入bootloader(刷机模式)或recovery(恢复模式)
adbreboot[bootloader|recovery]
apk相关:
1、安装apk
adbinstalltest.apk-r覆盖安装,保留数据和缓存文件-d解决低版本version问题-s安装apk到sd卡
2、卸载apk
adbuninstall-k
可选参数-k的作用为卸载软件但是保留配置和缓存文件
3、查看app相关所有信息,包括action,codepath,version,需要的权限等等信息
adbshelldumpsyspackage
4、查看app的路径
adbshellpmpath
查看了一个普通app的路径,如下,位于data/app下面的普通app
package:/data/app/com.tencent.test-1/base.apk
5、查看apk的版本信息
adbshelldumpsyspackage|grepversion
如果你得到的是下图的两个version版本,则为系统app,下面是系统app本身的版本,上面是升级之后的系统app的版本信息
versionCode=8targetSdk=22versionName=V0.08versionCode=6targetSdk=22versionName=V0.0
6、启动activity
adbshellamstart-n/.
7、获得应用的启动时间,可以很方便地获取应用的启动时间
adbshellamstart-W/.
试验结果如下:
adbshellamstart-Wcom.cc.test/com.painter.test.PainterMainActivityStarting:Intent{act=android.intent.action.MAINcat=[android.intent.category.LAUNCHER]cmp=com.cc.test/com.painter.test.PainterMainActivity}Status:okActivity:com.cc.test/com.painter.test.PainterMainActivityThisTime:355TotalTime:355WaitTime:365Complete
返回的几个结果,以WaitTime为准,返回的是从startActivity到应用第一帧完全显示的时间。
8、启动service,am的-n参数表示组件,-a参数表示命令,-a后面的参数为manifest中定义的service的action
adbshellamstartservice-n/.
也可:
adbshellamstartservice-a"android.intent.action.CALL"
9、发送广播
adbshellambroadcast-a"android.intent.action.AdupsFota.WriteCommandReceiver"
广播可以带上不同类型的参数,–es为string参数类型,–ei为int参数类型,–ez为boolean参数类型
adbshellambroadcast-a"android.intent.action.AdupsFota.WriteCommandReceiver"--estest_string"thisisteststring"
10、查看某个app的进程相关信息
10.1
adbshellps
例如
adbshellpscom.ma.app:pushUSERPIDPPIDVSIZERSSWCHANPCNAMEu0_a1165483304177656455112sys_epoll_00000000Scom.ma.app:push
小米手机上测试成功,在另外一个设备上,如果ps后面的参数是包名则显示不了进程的详细信息,参见下面的方式获取
10.2
adbshellps|grep
11、杀掉某个进程,一般用于模拟某个bug复现
adbshellkillpidNumber
12、查看某一个app的内存占用
adbshelldumpsysmeminfo
结果如下,其中的Heapsize包括了DalvikHeap和NativeHeap,平时我们所说的内存限制指的是DalvikHeap。
PssPrivatePrivateSwappedHeapHeapHeapTotalDirtyCleanDirtySizeAllocFree------------------------------------------NativeHeap189561894004696442882135222935DalvikHeap60102600880261921044868828516201AppSummaryPss(KB)------JavaHeap:61640NativeHeap:18940Code:3356Stack:428Graphics:16876PrivateOther:3840System:2031...
13、查看单个应用程序的最大内存限制
adbshellgetprop|grepheapgrowthlimit
得到的结果为128M:[dalvik.vm.heapgrowthlimit]:[128m]
这就是说DalvikHeapsize的最大值超过了128M,就很可能发生OOM
14、获取单个应用的电量消耗信息
BatteryHistorian是Android5.0开始引入的,下面的命令为获取单个app的电量消耗信息,获取系统耗电信息见下节
adbshelldumpsysbatterystats>>xxx.txt
上面的电量信息为原始数据,可以通过google编写的historian.py脚本把数据信息转换为可读性很好的html文件,类似TraceView生成的列表数据,之前在做app性能优化的时候起了很大的作用
pythonhistorian.pyxxx.txt>xxx.html
15、跑monkey,个人很喜欢这个命令,运行过程中,应用程序会不断切换画面,按照选定的不同级别反馈信息,还可以看到执行过程报告和生成的事件。测试应用的稳定性时很实用。现在studio也有了monkeyrunner的tool
adbshellmonkey-v-p500-p对象包-v反馈信息级别
:Monkey:seed=1493061025112count=500:AllowPackage:com.tencent.mm.app:push:IncludeCategory:android.intent.category.LAUNCHER:IncludeCategory:android.intent.category.MONKEY**Noactivitiesfoundtorun,monkeyaborted.
系统相关
1、查看设备名称,豌豆荚等应用就是通过此来获得设备的名称
adbshellcat/system/build.prop/
结果:
ro.product.model=MI3Wro.product.brand=Xiaomi
2、查看手机分辨率有两种方法,第二种方法最为简洁
2.1
adbshelldumpsyswindow|grepSurface
grep是一个非常有用的参数,具体含义和用法大家自行google一下,试验结果为1080*1920:
Surface:shown=falselayer=21000alpha=1.0rect=(0.0,0.0)1080.0x1920.0
2.2.
adbshellwmsize
返回结果为:
Physicalsize:1080x1920
3、查看手机sdk版本
adbshellgetprop|grepversion
运行上面的命令后,列出来的version中[ro.build.version.release]:[6.0.1]即为手机sdk版本
4、查看手机型号信息
adbshellgetprop|grepproduct
运行此命令之后,能看到product,board,brand和cpu等等的型号
5、获取序列号,获取到的序列号即为adbdevices列出来的序列号
adbget-serialno
6、查看连接的设备
adbdevices
如果有多个设备连接,想对其中的某一设备进行操作,就需要在此命令的后面加参数
adb[-d|-e|-s] -d:真机(多个设备中只有一个真机时适用)-e:模拟器(多个设备中只有一个模拟器时适用)-s:序列号
假如有两个真机连接了我的电脑,adbdevices获取到的数据如下
Listofdevicesattached1b71651device12sdfsddevice
进入1b71651设备的命令为:
adb-s1b71651shell
7、查看wifi密码(需要root权限)
adbshellcatdata/misc/wifi/*.conf
8、查看wifi_mac
adbshellcat/sys/class/net/wlan0/address
运行此命令,93:a1:a2:91:d1:c1是小米3的wifi_mac地址
9、查看后台services信息
adbshellservicelist
运行结果为
Found126services:0miui.whetstone.net:[miui.whetstone.INetworkService]1miui.whetstone.power:[miui.whetstone.power]...
10、查看系统当前内存占用,为综述
adbshellcat/proc/meminfo
运行结果:
MemTotal:1893504kBMemFree:81200kBBuffers:14828kBCached:244152kBSwapCached:15152kBActive:541680kBInactive:575280kB...
11、查看各进程详细内存占用和系统的内存占用有几种方法
11.1
adbshelldumpsysmeminfo
TotalPSSSWAPbyprocess:97858kB:34944kB:com.android.systemui(pid2769)...TotalRAM:1893504kB(statusnormal)FreeRAM:344212kB(117992cachedpss+136016cachedkernel+90204free)
TotalPSS信息就是你的应用真正占据的内存大小,通过这个信息,可以轻松判别手机中哪些程序占内存比较大。
11.2查看各进程内存的另一方法不是所有设备都支持
adbshellprocrank
运行结果如下:
PIDVssRssPssUsscmdline4961810184K92744K57607K48348Ksystem_server7431847492K84492K52117K46796Kcom.android.systemui....------------------328259K261484KTOTALRAM:2061012Ktotal,889152Kfree,40940Kbuffers,612032Kcached,300Kshmem,62556Kslab
其中
VSS–VirtualSetSize虚拟耗用内存(包含共享库占用的内存)RSS–ResidentSetSize实际使用物理内存(包含共享库占用的内存)PSS–ProportionalSetSize实际使用的物理内存(比例分配共享库占用的内存)USS–UniqueSetSize进程独自占用的物理内存(不包含共享库占用的内存)
11.3查看设备上进程的cpu和内存占用情况
adbshelltop
12、查看系统耗电情况
adbshelldumpsysbatterystats>xxx.txt
13、查看系统设置的闹钟
adbshelldumpsysalarm
14、查看系统的wakelock,不合理的使用wakelock会导致系统耗电加剧
adbshelldumpsyspower
返回结果:
WakeLocks:size=2PARTIAL_WAKE_LOCK'AudioMix'(uid=1013,pid=236,ws=WorkSource{10018})PARTIAL_WAKE_LOCK'Android.media.MediaPlayer'ON_AFTER_RELEASE(uid=10018,pid=24023,ws=null)
文件操作相关:
1、拷贝文件/目录到设备
adbpush...
2、从设备拷贝文件/目录,-a参数保留了文件的时间戳和模式
adbpull[-a]...
3、查看设备log,和studio和eclipse的logcat相同,可通过参数控制输出的日志
adblogcat-s过滤指定参数log-vtime保留日志时间>>追加写>覆盖写
下面的命令含义为:打印出log信息中的时间并且包含关键字“Test”的所有log以覆盖写的方式保存到test文件
adblogcat-vtime-sTest>test.txt
4、列出目录下的文件和文件夹,可选参数-al可查看文件和文件夹的详细信息
adbshellls[-al]
5、进入文件夹
adbshellcd
6、查看文件
adbshellcat
7、重命名文件
adbshellrenamepath/oldfilenamepath/newfilename
8、删除文件/文件夹
adbshellrmpath/filename-r可选参数用于删除文件夹及下面的所有文件eg:adbshellrm-r
9、移动文件
adbshellmvpath/filenamenewpath/filename
10、拷贝文件
adbshellcpfilenewpath/file1
11、创建目录
adbshellmkdirpath/folder
12、设置文件最高读写权限
adbshellchmod777filename
13、手机未root查看data/data/某一app文件信息
笔者的小米3没有root,但是又想方便地查看data/data/目录下的一些文件,直接进入data会提示没有权限,查看的方式为进入data/data/后,运行下面的命令,就能直接进入你应用的包下了,可通用cp或者mv拷贝或移动到sdcard目录进行其他操作
run-aspackage_name
数据库相关
数据库的操作和今天的主题关系不大,增删改查操作不再列举。但是平时的开发过程中只是查看数据库中某个表或者某个字段,也无需每次都pull出来之后再查看,用命令行会更加方便快捷,进入到test.db的目录后,运行如下命令
1、操作db
sqlite3test.db
2、对db使用sqlite3命令后,通过.help查看各种使用指导
.help
3、列举数据库的table名称
.tables
4、列表数据库的schema,个人觉得下面两个命令很有用,效果等同,可以方便快捷地查看数据库字段对应的数据类型,.schema更加简洁
.schema
或者
select*fromsqlite_masterwheretype="table";
ps:原创文章,转载注明出处