android adb 命令详解

原理:

 

ADB是一个C/S架构的应用程序,由三部分组成:

  1. adb client --运行在pc端

      运行adb命令:尝试定位ADB服务器,找不到则启动一个服务器;

adb client向ADB servcer发送服务请求。

  1. adb server--运行在pc端的后台进程

作用:

(1)检测USB端口感知设备的连接/拔除和模拟器实例的启动或停止;

(2)监听adb client的请求并发送到对应的adbd上。

  1. adb demon (adbd) --运行在设备端、常驻进程

作用: 连接ADB服务器,并且为运行在主机上的客户端提供一些服务。 

基本用法

1.设备连接

USB连接:

  1. Android设备正常开机,通过USB线与电脑连接
  2. 开启开发者选项和USB调试模式
  3. 设备驱动状态正常

 

无线连接(需借助usb):

1.将 Android 设备通过USB与电脑相连,且两者连到同一个局域网

2. 让设备在 5555 端口监听 TCP/IP 连接:adb tcpip 5555

4. 断开 USB 连接。

5. 通过设备IP地址连接设备。adb connect <device-ip-address>

(断开无线连接adb disconnect <device-ip-address>)

 

2.基本命令

命令

含义

adb verion查看adb版本
adb start-server启动adb server(一般无需手动启动)
adb kill-server停止adb server
adb root以 root 权限运行 adbd
adb unroot以 普通权限运行 adbd
adb remount已读写方式挂载系分区/system
adb devices查询已经链接的设备
adb get-serialno打印设备序列号(和adb devices中的序列号一致)
adb wait-for-device阻塞直到设备在线
adb get-state

查看设备状态:

device:设备正常连接 

offline:连接出现异常,设备无响应 

unknown:没有连接设备

adb status-window连续输出设备状态
adb bugreport返回设备bug report相关的所有信息
adb [-d|-e|-s ]

adb -e shell //进入到模拟器中

adb –d shell //进入到真机中

adb –s <设备id> shell //进入到指定设备中

adb shell svc wifi enable/disable开/关wifi
adb reboot重启设备
adb reboot-bootloader设备重启到bootloader模式
adb reboot [bootloader|recovery]设备重启到bootloader或recovery模式
adb tcpip <port>重启adbd在指定的tcp端口上进行监听
adb usb重启adbd在usb上进行监听

 

实用功能:

  1. 截图

adb shell screencap –h查看参数            

adb exec-out screencap -p > sc.png  //直接保存到本地电脑

adb shell screencap -p /sdcard/sc.png   //保存到手机

adb pull /sdcard/sc.png

  1. 录制屏幕

adb shell screenrecord --help看详细参数

adb shell screenrecord /sdcard/filename.mp4

需要停止时按Ctr+C,默认录制时间和最长录制时间为180s。

  1. 获取当前界面的控件信息

adb shell uiautomator dump [--compressed] [file] dump出当前窗口的UI布局简化信息到指定文件,默认文件是在/sdcard/window_dump.xml

 

  1. 应用管理

1.应用查看/安装/卸载

 

查看应用列表adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]

参数

显示列表

所有应用

-f

显示应用关联的 apk 文件

-d

只显示 disabled 的应用

-e

只显示 enabled 的应用

-s

只显示系统应用

-3

只显示第三方应用

-i

显示应用的 installer

-u

包含已卸载应用

<FILTER>

包名包含 <FILTER> 字符串

查看应用详细信息

adb shell dumpsys package <packagename>

安装apk

adb install [-lrtsdg] <path_to_apk>

-l

将应用安装到保护目录 /mnt/asec

-r

允许覆盖安装

-t

允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的应用

-s

将应用安装到 sdcard

-d

允许降级覆盖安装

-g

授予所有运行时权限

卸载应用

 

adb uninstall [-k] <packagename>

-k 卸载应用但保留数据和缓存目录

查看安装路径

adb shell pm path <packagename>

清除应用数据及缓存adb shell pm clear <packagename>
查看前台activity

adb shell dumpsys activity activities | findstr mFocusedActivity

或adb shell dumpsys activity | grep -i run

或adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'

查看正在运行的Servicesadb shell dumpsys activity services [<packagename>]

 

2.与应用的交互

adb shell am <command>

命令

用途

am start [options] <INTENT>启动 <INTENT> 指定的 Activity
am startservice [options] <INTENT>启动 <INTENT> 指定的 Service
am broadcast [options] <INTENT>发送 <INTENT> 指定的广播
am force-stop <packagename>停止 <packagename> 相关的进程

 

[options]选项如下:

参数

含义

-a <ACTION>指定 action,比如 android.intent.action.VIEW
-c <CATEGORY>指定 category,比如 android.intent.category.APP_CONTACTS
-n <COMPONENT>指定完整 component 名,用于明确指定启动哪个 Activity,如 com.example.app/.ExampleActivity

例如:

1)adb shell am start -n com.tencent.mm/.ui.LauncherUI  //表示调起微信主界面

2)adb shell am startservice -n com.tencent.mm/.plugin.account.model.AccountAuthenticatorService //表示调起微信的某个 Service.

3)adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver //只向BootCompletedReceiver发送广播BOOT_COMPLETED

4)adb shell am force-stop com.qihoo360.mobilesafe  //停止 360 安全卫士

 

部分系统预定义广播及正常触发时机

action

触发时机

android.net.conn.CONNECTIVITY_CHANGE网络连接发生变化
android.intent.action.SCREEN_ON屏幕点亮
android.intent.action.SCREEN_OFF屏幕熄灭
android.intent.action.BATTERY_LOW电量低,会弹出电量低提示框
android.intent.action.BATTERY_OKAY电量恢复了
android.intent.action.BOOT_COMPLETED设备启动完毕
android.intent.action.DEVICE_STORAGE_LOW存储空间过低
android.intent.action.DEVICE_STORAGE_OK存储空间恢复
android.intent.action.PACKAGE_ADDED安装了新的应用
android.net.wifi.STATE_CHANGEWiFi连接到一个ssid后的广播
android.net.wifi.WIFI_STATE_CHANGEDWiFi 状态变为启用/关闭/正在启动/正在关闭/未知
android.intent.action.BATTERY_CHANGED电池电量发生变化
android.intent.action.INPUT_METHOD_CHANGED系统输入法发生变化
android.intent.action.ACTION_POWER_CONNECTED外部电源连接
android.intent.action.ACTION_POWER_DISCONNECTED外部电源断开连接
android.intent.action.DREAMING_STARTED系统开始休眠
android.intent.action.DREAMING_STOPPED系统停止休眠
android.intent.action.WALLPAPER_CHANGED壁纸发生变化
android.intent.action.HEADSET_PLUG插入耳机
android.intent.action.MEDIA_UNMOUNTED卸载外部介质
android.intent.action.MEDIA_MOUNTED挂载外部介质
android.os.action.POWER_SAVE_MODE_CHANGED省电模式开启

 

3.如何启动被测程序?

启动的方法:adb shell am start -n包名/启动页的Activity

  • 确定包名:adb shell pm list package -f
  • 查看app启动页Activity:

adb shell dumpsys package <包名>

找到包含“category.LAUNCHER”的Activity即为启动页Activity

 

  1. 文件管理

adb pull <设备里的文件路径> [电脑上的目录]   //复制设备里的文件到电脑

adb push <电脑上的文件路径> <设备里的目录>  //复制电脑里的文件到设备

  1. 模拟按键/输入

input [<source>] <command> [<arg>...]  (详情见adb shell input --help)

屏幕点击:adb shell input tap <x> <y> //在屏幕上点击坐标点(x,y)的位置

屏幕滑动:adb shell input swipe <x1> <y1> <x2> <y2> //从(x1,y1)滑动到(x2,y2)

文本输入:adb shell input text <string> //将<string>输入到文本框中

模拟按键: adb shell input keyevent <keycode>

keycode

含义

keycode

含义

3

HOME 键

126

恢复播放

4

返回键

127

暂停播放

5

打开拨号应用

164

静音

6

挂断电话

176

打开系统设置

24

增加音量

187

切换应用

25

降低音量

207

打开联系人

26

电源键

208

打开日历

27

拍照(需要在相机应用里)

209

打开音乐

64

打开浏览器

210

打开计算器

82

菜单键

220

降低屏幕亮度

85

播放/暂停

221

提高屏幕亮度

86

停止播放

223

系统休眠

87

播放下一首

224

点亮屏幕

88

播放上一首

231

打开语音助手

122

移动光标到行首或列表顶部

276

如果没有 wakelock 则让系统休眠

123

移动光标到行末或列表底部

  

 

  1. 日志

Android 系统的日志分为两部分,底层的 Linux 内核日志输出到/proc/kmsg,Android 的日志输出到 /dev/log。

 

Android 日志命令格式:  [adb] logcat [<option>] ... [<filter-spec>] ...

其中<filter-spec> 可以由多个 <tag>[:priority] 组成。

1.日志过滤

Android 的日志分为如下几个优先级(priority):

V —— Verbose(最低,输出得最多)

D —— Debug

I —— Info

W —— Warning

E —— Error

F —— Fatal

S —— Silent(最高,啥也不输出)

按某级别过滤日志则会将该级别及以上的日志输出。

比如: adb logcat ActivityManager:I MyApp:D *:S   //输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。

2.日志格式:

    可以用 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 <format> > <文件名>    //将log重定向到文件中

3. 清空日志:adb logcat -c

4. 内核日志命令:adb shell dmesg

  1. 查看/修改设备信息

1.查看设备信息

查看设备型号信息adb shell getprop ro.product.model
查看电池状况adb shell dumpsys battery
屏幕分辨率adb shell wm size
设备屏幕密度adb shell wm density
显示屏参数命令adb shell dumpsys window displays
android_idadb shell settings get secure android_id
IMEI

Android 4.4 及以下版本:adb shell dumpsys iphonesubinfo

在 Android 5.0 及以上版本(要root权限):

#adb shell

su

service call iphonesubinfo 1

Android 系统版本adb shell getprop ro.build.version.release
IP地址

adb shell ifconfig | grep Mask 或

adb shell netcfg (部分系统版本可以) 或

设备连着 WiFi时可尝试:adb shell ifconfig wlan0

Mac 地址

adb shell cat /sys/class/net/wlan0/address(局域网 Mac 地址)

移动网络或其它连接的信息可用adb shell netcfg 命令来查看

CPU 信息adb shell cat /proc/cpuinfo
内存信息adb shell cat /proc/meminfo
更多硬件与系统属性

adb shell cat /system/build.prop

2.修改设备信息

注: 修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行 #adb reboot 重启设备,或手动重启。

修改设置的原理主要是通过settings 命令修改/data/data/com.android.providers.settings/databases/settings.db(Android6.0后为/data/system/users/userid/下面的xml文件) 里存放的设置值。

 

修改/恢复分辨率

adb shell wm size 480x1024

adb shell wm size reset

修改/恢复屏幕密度

adb shell wm density 160

adb shell wm density reset

修改/恢复显示区域命令:

adb shell wm overscan 0,0,0,200(四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 200px 留白。)

adb shell wm overscan reset

关闭 USB 调试模式adb shell settings put global adb_enabled 0
状态栏和导航栏的显示隐藏adb shell settings put global policy_control <key1>=<value1>:<key2>=<value2>…

 

状态栏和导航栏的显示隐藏:

adb shell settings put global policy_control <key1>=<value1>:<key2>=<value2>…

Key

Value

immersive.full同时隐藏apps所有应用
immersive.status 隐藏状态栏* 所有界面
immersive.navigaion 隐藏导航栏packagename指定应用
immersive.precomfirms ?-packagename排除指定应用

例如:

#adb shell settings put global policy_control immersive.full=*

表示设置在所有界面下都同时隐藏状态栏和导航栏。

# adb shell settings put global policy_control immersive.full=-* //取消上面的隐藏

#adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3

表示设置在包名为com.package1 和com.package2 的应用里隐藏状态栏,在除了包名为com.package3 的所有应用里隐藏导航栏。

 

  1. 备份与还原

备份:adb backup [-f <file>] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] [-all] [-system|-nosystem] [<packages...>]

还原:adb restore <file>

 

备份选项含义
adb backup -all使用默认方式备份应用和设备的数据(不包含apk)到当前目录下并保存为文件backup.ab
-f指定备份文件
-obb|-noobb备份是否包含程序连带的扩展数据,默认是-noobb
-apk|-noapk备份中是否包含apk
-shared|-noshared是否备份设备共享的SD card内容
-system|-nosystem决定-all是否包含系统应用,默认的是-system
[<packages...>]带包名表示只备份此包的相关信息

例如:adb backup  -apk  -shared  -system  -all  -f  backup_apk.ab

 

  1. 转发

adb forward [--no--rebind] <local> <remote> 

adb forward --remove <local>

adb forward --remove-all

adb forward --list

例如:adb forward tcp:11111 tcp:22222

建立一个转发将PC端的11111端口收到的数据,转发给到手机中22222端口。但是只执行这个命令还不能转发数据,还需要完成两个步骤才能传数据。这两个步骤是:

(a)在手机端,建立一个端口为22222的server,并打开server到监听状态。

(b)在PC端,建立一个socket client端,连接到端口为11111的server上。

 

PC端的应用与手机端应用之间传输数据的过程:

(1)PC端应用将数据发送给端口为11111的server(adb创建的)

(2)adb将数据转发给手机端adbd进程(通过USB传输)

(3)adbd进程将数据发送给端口为22222的server(手机端应用创建的)

传递是双向的,第(1)和第(3)步是通过socket实现的,所以通过socket的读和写就完成了PC端应用和手机端应用的数据传递。

  1. Mokey测试

Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;

Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;

帮助文档:adb shell monkey --help

参数介绍:

Monkey命令参数含义
-p

参数指定一个或多个包。

adb shell monkey -p com.htc.Weather –p com.htc.pdfreader 100

-v

指定日志的详细程度,总共分3个级别:

Level 0:缺省值,提供启动提示、测试完成和最终结果等少量信息。 

adb shell monkey -p com.htc.Weather –v 100

Level 1:详细的日志,包括每个发送到Activity的事件信息

adb shell monkey -p com.htc.Weather -v -v 100

 Level 2:最详细的日志,包括了测试中选中/未选中的Activity信息

adb shell monkey -p com.htc.Weather -v -v -v 100

-s

指定伪随机数生成器的seed值

adb shell monkey -p com.htc.Weather -s 10 100

--throttle <毫秒>

指定用户操作(即事件)间的时延。

adb shell monkey -p com.htc.Weather –throttle 3000 100

 --ignore-crashes

程序崩溃仍发送事件,直到事件计数完成。

adb shellmonkey -p com.htc.Weather --ignore-crashes 100

--ignore-timeouts程序发生ANR时,仍然发送事件,直到事件计数完成。
 --ignore-security-exceptions当应用程序发生许可错误时(如证书许可,网络许可等),仍然发送事件,直到事件计数完成。
--kill-process-after-error当应用程序发生错误时,停止运行并保持在当前状态,(应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)
--monitor-native-crashes用于指定是否监视并报告应用程序发生崩溃的本地代码。
--pct-{+事件类别}{+事件类别百分比}

用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)

adb shell monkey –p <pkg> --pct-touch 10 1000

 

事件类别

含义
--pct-touch 触摸事件:是一个down-up事件,它发生在屏幕上的某单一位置
--pct-motion动作事件:由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成
--pct-trackball轨迹事件:由一个或几个随机的移动组成,有时还伴随有点击
--pct-nav基本导航事件:由来自方向输入设备的up/down/left/right组成
--pct-majornav主要导航事件:此类事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键
--pct-syskeys系统按键:Home、Back、Start Call、End Call及音量控制键等
--pct-appswitch调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
--pct-anyevent调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等

 

  1. 数据库操作

  adb shell  

sqlite3  <数据库文件>   //进入到数据库中

sqlite>.tables           //列出各个表

sqlite>.schema <表名>     //获得完整的数据库表字段信息

sqlite>.help             //查看命令

sqlite> select * from <表名>      //SQL语句

sqlite> .exit         //退出数据库

adb基本的命令教程 (1人评价)|347人阅读|9次下载|举报文档 手?机?A?D?B?命?令 要使用adb命令,手机需要打开USB debug 安装软件 adb install apk文件名称.apk 重新安装该软件 adb install -r apk文件名称.apk 卸载apk软件 adb uninstall apk包名.apk 查看手机上的运行日志,此项可以用来查错 adb logcat 查看手机是否连接,以及连接了几台手机 adb devices A为手机路径,B为电脑路径,意思为:把文件从手机中复制到电脑上 adb pull A为手机路径,B为电脑路径,意思为:把文件从电脑复制到手机上 adb push 进入手机的超级终端Termil adb shell 重新挂载文件系统 adb remount 重启手机 adb reboot 重启到Recovery界面 adb reboot recovery 重启到bootloader界面 adb reboot bootloader 例子:刷官方高版本后重新获取ROOT和降级方法(部份操作) 进行adb运行环境 adb shell 设置超级用户模式 su 映射出目录 mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 退出su exit 退出shell准备接受下一个adb命令 exit 增加flash_image文件到手机上 adb push flash_image.zip /system/bin/flash_image recovery先复制到卡上 adb push recovery-RA-heroc-v1.6.2.img /sdcard B?? 再次进入adb环境 adb shell 修改文件属性 chmod 0755 /system /bin/flash_image 重启系统 reboot 1234567890ABCDEFGHIJKLMNabcdefghijklmn!@#$%^&&*()_+.一三五七九贰肆陆扒拾,。青玉案元夕东风夜放花千树更吹落星如雨宝马雕车香满路凤箫声动玉壶光转一夜鱼龙舞蛾儿雪柳黄金缕笑语盈盈暗香去众里寻他千百度暮然回首那人却在灯火阑珊处
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值