adb命令集合


adb是什么 adb工具即 Android Debug Bridge安卓调试桥 tools
它就是一个命令行窗口 用于通过电脑端与模拟器或者真实设备交互
在进入不了系统 adb 就派上用场啦 D:\Android\android-sdk\platform-tools\adb.exe
开源程序   //androidxref.com/8.0.0_r4/xref/system/core/adb/
查看模拟器adb端口
常用模拟器:
genymotion
天天模拟器
夜神模拟器
领航模拟器
在模拟器中运行模拟终端app 然后在模拟终端中运行netstat命令查看模拟器的adb端口
夜神的情况(一般是在62001开始)
C:\>adb connect 127.0.0.1:5037
connected to 127.0.0.1:5037
打印当前连接的所有模拟器或者设备
adb devices
C:\>adb devices
List of devices attached
127.0.0.1:62001 device
这个用的是夜神模拟器
ADB原理
Android 调试系统是面对客户服务系统
三个组成部分:
一个在用于开发程序的电脑上运行的客户端
可以通过shell端使用adb命令启动客户端
其他Android工具比如说ADT插件和DDMS同样可以产生adb客户端.
在用于开发的机器上作为后台进程运行的服务器
该服务器负责管理客户端与运行于模拟器或设备上的adb守护程序(daemon)之间的通信
一个以后台进程的形式运行于模拟器或设备上的守护程序(daemon)
当启动一个adb客户端 客户端首先确认是否已有一个adb服务进程在运行
如果没有 则启动服务进程
当服务器运行  adb服务器就会绑定本地的TCP端口5037并监听adb客户端发来的命令
所有的adb客户端都是用端口 5037与adb服务器对话
接着服务器将所有运行中的模拟器或设备实例建立连接
它通过扫描所有5555到5585范围内的奇数端口来定位所有的模拟器或设备
一旦服务器找到 了adb守护程序 它将建立一个到该端口的连接
任何模拟器或设备实例会取得两个连续的端口
一个偶数端口响应控制台的连接 和一个奇数端口响应adb连接
比如说:
模拟器1 控制台:端口5554
模拟器1 Adb端口5555
adb传输文件
#push 文件到手机
adb push C:\>czgQrCode.jpg /sdcard/czgDownload
adb push  C:\>1.png storage/emulated/legacy/DCIM/Camera/
#push 目录到手机 mobileData 这个目录copy--》到 收集sd卡的czgDownlaod目录
adb push C:\czg\mobileData /sdcard/czgDownload/
adb push C:\czg\czgDownload /sdcard/
#pull 手机文件到电脑(注意在git Bash命令行不能使用哦)
adb pull /sdcard/czgDownload/EnMicroMsg.db C:/czg/
#开启服务
am startservice -n com.zan.input/com.zan.input.service.ImageService
#更新手机图库

adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///storage/emulated/0/DCIM/Camera/

adb shell  am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///storage/emulated/legacy/DCIM/Camera/
adb 链接多手机开发
uber-adb-tools
https://github.com/patrickfav/uber-adb-tools
awesome-adb
https://github.com/topics/android-debug-bridge
adb版本不匹配
解决 adb 提示adb server version(31) doesn't match this client 41 解决办法
用adb工具去连接安卓设备
或者模拟器的时候
提示adb server version(31) doesn’t match this client 41这样的提示
字面意思就是当前client版本40 与server端的版本不匹配 当前版本过高引起的
这里的client就是电脑已经安装的adb程序的版本 而server就是服务端 将要connect的设备
这种不匹配只要下载对应的adb版本重新替换之前安装的adb就行了
对应的android studio 路径就是你的android sdk 目录的platform-tools文件夹里面的adb.exe程序
或者
解决方法二 先关闭所有 adb 的进程;
将 SDK 的 platform-tools 目录下的 adb.exe 文件复制到电脑任意路径下
并改名为 nox_adb.exe
然后再把改名后的文件拷贝到夜神模拟器安装路径的 bin 目录下替换原来的 nox_adb.exe 文件;
重启模拟器
接着再进入命令行窗口输入命令adb devices 查看设备信息,这样就能正常显示出来了。
List of devices attached
127.0.0.1:62001 device
夜神模拟器连不上 adb 问题解决方法
也有可能是因为电脑安装了 鲁大师 /360手机/手机助手 占用了adb的端口引起的
因为套接字的唯一性 一个套接字只能由 协议/网络地址/端口号 唯一确定
一个电脑只能有一个程序关联对应的端口
对于adb对应的端口就是5037 为了验证你的5037端口是否被占用
netstat -ano|findstr 5037
去查找5037对应的端口号的进程id 也就是pid
C:>netstat -ano|findstr 5037
TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       13332
如果有相应的pid 就证明此端口5037有程序占用了
果然 5037端口有相应的进程
查找相应的进程对应的进程名称
tasklist |findstr 13332
打开进程管理器结束这个进程
C:>tasklist |findstr 13332
ludash 13332 Console 1      6,384 K
单击结束进程把它结束了
再运行adb connect server IP 成功运行
C:\>adb devices
List of devices attached
127.0.0.1:62001 device
端口映射 adb forward
将 PC 端的某端口数据重定向到手机端的一个端口
adb forward <local> <remote>
终止 adb 进程
adb kill-server
无线调试必备命令
Wireless
远程桌面达到远程调试的结果
adb connect
需要保证设备和 PC 在同一局域网内 所以可通过
adb connect <host>[:<port>]
需要保证设备的 /system/build.prop 文件中有命令 service.adb.tcp.port=5555,否则会遭到拒绝
此处无限调试设置方法:
打开设备的调试模式 允许 USB 以 MTP 模式传输 确保设备和 PC 能正常连接 可以通过 adb shell 或者 adb devices 等进行验证
确保已连接后 依次执行以下命令:
adb root
adb remount
adb pull /system/build.prop ./
在 adb 命令执行的文件夹下的 build.prop 中加入命令 service.adb.tcp.port=5555
执行 adb push ./build.prop /system/ 后重启设备
结束后断开 USB 连接线 输入 adb connect 设备IP:5555 确认可以正常连接
adb usb
设置设备以 USB 形式连接 PC
Package Manager
adb install
主要用于往 Android 设备 push 应用
adb install [option] <path>
其中的 option 也是比较有讲究的 下面就只说最常用的
adb install test.apk 直接安装应用
adb install -r test.apk 替代存在的应用 不会删除应用数据 用于更新应用特别方便
其余的不是很常用的就不多提了 感兴趣的可以自行了解
adb uninstall
从设备或者模拟器卸载应用
adb uninstall [options] <package>
两种情况 假设我们的应用 APP 包名是 com.example.application
adb uninstall com.example.application 直接删除应用和所有数据
adb uninstall -k com.example.application 删除应用 但会保留应用数据和缓存数据
adb shell pm list packages
打印设备下面的所有应用包名
adb shell pm list packages [options] <FiLTER>
adb shell pm path
打印 apk 的路径
adb shell pm path <package>
adb shell pm clear
清除应用缓存
adb shell pm clear <package>
File Manager
adb pull
从 Android 设备下载文件到 PC
adb pull <remote> [local]
其中 <remote> 代表文件在设备中的地址 [local] 代表存放目录
adb push
把 PC 的文件存放到 Android 设备
adb push <local> <remote>
adb shell ls
列出目录内容
adb shell ls [options] <directory>
adb shell cd
和一般的 PC 的 cd 差不多 主要用于切换目录
adb shell cd <directory>
adb shell rm
删除文件或者目录
adb shell rm [options] <file or directory>
adb shell mkdir
创建一个文件夹
adb shell mkdir [options] <directory name>
adb shell touch
创建一个新文件或者改变文件修改时间
adb shell touch [options] <file>
adb shell pwd
定位当前的操作位置
adb shell pwd
adb shell cp
字面意思 很好理解 复制
adb shell cp [options] <source> <dest>
adb shell mv
移动或者更名文件
adb shell mv [options] <source> <dest>
Network
adb shell netstat
主要用于网络统计
adb shell ping
没啥好说的 和 PC 的 ping 命令一样的
adb shell netcfg
通过配置文件配置和管理网络连接
adb shell netcfg [<interface> {dhcp|up|down}]
adb shell ip
主要用于显示一些数据
adb shell ip [OPTIONS] OBJECT
Logcat
adb logcat
打印日志文件
adb logcat [options] [filter-specs]
当然可以像 Android Studio 一样只打印固定的日志
adb logcat *:V lowest priority, filter to only show Verbose level
adb logcat *:D filter to only show Debug level
adb logcat *:I filter to only show Info level
adb logcat *:W filter to only show Warning level
adb logcat *:E filter to only show Error level
adb logcat *:F filter to only show Fatal level
adb logcat *:S Silent, highest priority, on which nothing is ever printed
adb shell dumpsys
获取系统数据
adb shell dumpsys [options]
其中有个非常好用的是 当你在新接触一个项目的时候 不熟悉项目流程 此时正好可以用这个直接定位到你的 Activity 位置
adb shell dumpsys activity activities
直接在打印出来内容的后半段找到了当前 Activity 的定位 是 NewLoginActivity
adb shell dumpstate
和命令直译差不多 dumps state
Screenshot
adb shell screencap
一般的手机都有截图功能(一般下拉菜单中有) 但不代表所有 Android 设备都在可视化中开启了这个功能 所以这时候这个 adb 命令就显得特别重要
adb shell screencap <filename>
结合前面的 pull 命令 就可以轻松拿到屏幕截图
adb shell screencap /sdcard/test.png 截图存放
adb pull /sdcard/test.png 取到 PC 当前文件夹
adb shell screencord
有了屏幕截图 自然也得有屏幕录制 可惜这个必须在 Android 4.4 (API level 19) 以上才可使用
adb shell screencord /sdcard/test.mp4
这个还可以对大小 size 和 时间做限制 感兴趣的可以自行了解
System
adb root
获取 root 权限
adb sideload
adb shell ps
打印进程状态
adb shell top
展现上层 CPU 进程信息
adb shell getprop
获取 Android 系统服务属性
adb shell setprop
设置服务属性