zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

adb(Android debug bridge)命令

Androidadb命令 debug Bridge
2023-09-11 14:13:59 时间

 

From:https://www.cnblogs.com/huanyou/p/5133737.html

 

ADB 用法大全: github 地址:https://github.com/mzlogin/awesome-adb

adb 官网链接( 国内想访问,你懂得!!! ):https://developer.android.com/studio/profile/monitor

 

官网截图:

 

 

 

概述

 

adb 是什么 ?

        adb 的全称为 Android Debug Bridge,就是起到调试桥的作用。通过 adb 我们可以在 Eclipse 中通过 DDMS 来调试 Android 程序,说白了就是 debug 工具。adb 的工作方式比较特殊,采用监听 Socket TCP 5554 等端口的方式让 IDE 和 Qemu 通讯,默认情况下 adb 会 daemon 相关的网络端口,所以当我们运行 Eclipse 时 adb 进程就会自动运行。

 

adb 有什么用 ?

        借助 adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行 shell 命令等等。其实简而言说,adb 就是连接 Android手机 与 PC端 的桥梁,可以让用户在电脑上对手机进行全面的操作!

 

包括三个部分:adb客户端(PC上),adb服务器(PC上),adbd(模拟器或真机上)。

网上看到下图,贴上来

  运行 adb 客户端 时,会检测 adb服务器 进程是否运行,如果没有运行,启动服务器。当服务器启动时,会绑定到本地的TCP 5037 端口。并且监听从 adb客户端 发来的命令。

说明:可以通过 adb start-server 启动服务,通过 adb kill-server 停止服务。

  adb服务器 与所有正在运行的 模拟器真机 连接。它通过扫描 5555—5585 之间的奇数端口来搜索模拟器或真机,一旦发现 adb守护进程,就通过此端口进行连接。

需要说明的是,每一个模拟器或真机使用一对端口,

  • 奇数 端口 用于 adb 连接
  • 偶数 端口 用于 控制台 连接

如果 模拟器 与 adb 在 5555 端口 连接,则控制台的连接端口将是 5554.

 

有线连接

手机通过数据线连接电脑,手机启用 " USB调试 ",然后输入命令:adb devices  [-l]

多个设备连接时,可以使用 -s 参数指定要连接的设备:

 

无线连接(需要借助 USB 线)

连接过程中也有需要使用 USB ,但是连接成功之后,手机就可以在一定范围内摆脱 USB 连接线的限制。

操作步骤:

  1. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。
  2. 将设备与电脑通过 USB 线连接。应确保连接成功(可运行 adb devices 看是否能列出该设备)。
  3. 让设备在 5555 端口监听 TCP/IP 连接:adb tcpip 5555
  4. 断开 USB 连接。
  5. 找到设备的 IP 地址。一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到,也可以使用下文里 查看设备信息 - IP 地址 一节里的方法用 adb 命令来查看。
  6. adb connect <device-ip-address> 。这里的 <device-ip-address> 就是上一步中找到的设备 IP 地址。
  7. 确认连接状态:adb devices
    如果能看到
            <device-ip-address>:5555 device
    说明连接成功。

断开无线连接

命令:adb disconnect <device-ip-address>

 

 

无线连接(无需借助 USB 线)

注:需要 root 权限。

上一节「无线连接(需要借助 USB 线)」是官方文档里介绍的方法,需要借助于 USB 数据线来实现无线连接。

既然我们想要实现无线连接,那能不能所有步骤下来都是无线的呢?答案是能的。

  1. 在 Android 设备上安装一个终端模拟器。

    已经安装过的设备可以跳过此步。我使用的终端模拟器下载地址是:Terminal Emulator for Android Downloads

  2. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

  3. 打开 Android 设备上的终端模拟器,在里面依次运行命令:

    su
    setprop service.adb.tcp.port 5555
  4. 找到 Android 设备的 IP 地址。

    一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到,也可以使用下文里 查看设备信息 - IP 地址 一节里的方法用 adb 命令来查看。

  5. 在电脑上通过 adb 和 IP 地址连接 Android 设备。

    adb connect <device-ip-address>

    这里的 <device-ip-address> 就是上一步中找到的设备 IP 地址。

    如果能看到 connected to <device-ip-address>:5555 这样的输出则表示连接成功。

节注一:

有的设备,比如小米 5S + MIUI 8.0 + Android 6.0.1 MXB48T,可能在第 5 步之前需要重启 adbd 服务,在设备的终端模拟器上运行:

restart adbd

如果 restart 无效,尝试以下命令:

stop adbd
start adbd

 

 

adb 命令帮助

adb -h

C:\>adb -h
Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android
Installed as C:\Microsoft\AndroidSDK\25\platform-tools\adb.exe

global options:
 -a         listen on all network interfaces, not just localhost
 -d         use USB device (error if multiple devices connected)
 -e         use TCP/IP device (error if multiple TCP/IP devices available)
 -s SERIAL
     use device with given serial number (overrides $ANDROID_SERIAL)
 -p PRODUCT
     name or path ('angler'/'out/target/product/angler');
     default $ANDROID_PRODUCT_OUT
 -H         name of adb server host [default=localhost]
 -P         port of adb server [default=5037]
 -L SOCKET  listen on given socket for adb server [default=tcp:localhost:5037]

general commands:
 devices [-l]             list connected devices (-l for long output)
 help                     show this help message
 version                  show version num

networking:
 connect HOST[:PORT]      connect to a device via TCP/IP [default port=5555]
 disconnect [HOST[:PORT]]
     disconnect from given TCP/IP device [default port=5555], or all
 forward --list           list all forward socket connections
 forward [--no-rebind] LOCAL REMOTE
     forward socket connection using:
       tcp:<port> (<local> may be "tcp:0" to pick any open port)
       localabstract:<unix domain socket name>
       localreserved:<unix domain socket name>
       localfilesystem:<unix domain socket name>
       dev:<character device name>
       jdwp:<process pid> (remote only)
 forward --remove LOCAL   remove specific forward socket connection
 forward --remove-all     remove all forward socket connections
 ppp TTY [PARAMETER...]   run PPP over USB
 reverse --list           list all reverse socket connections from device
 reverse [--no-rebind] REMOTE LOCAL
     reverse socket connection using:
       tcp:<port> (<remote> may be "tcp:0" to pick any open port)
       localabstract:<unix domain socket name>
       localreserved:<unix domain socket name>
       localfilesystem:<unix domain socket name>
 reverse --remove REMOTE  remove specific reverse socket connection
 reverse --remove-all     remove all reverse socket connections from device

file transfer:
 push LOCAL... REMOTE
     copy local files/directories to device
 pull [-a] REMOTE... LOCAL
     copy files/dirs from device
     -a: preserve file timestamp and mode
 sync [DIR]
     copy all changed files to device; if DIR is "system", "vendor", "oem",
     or "data", only sync that partition (default all)
     -l: list but don't copy

shell:
 shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...]
     run remote shell command (interactive shell if no command given)
     -e: choose escape character, or "none"; default '~'
     -n: don't read from stdin
     -T: disable PTY allocation
     -t: force PTY allocation
     -x: disable remote exit codes and stdout/stderr separation
 emu COMMAND              run emulator console command

app installation:
 install [-lrtsdg] PACKAGE
 install-multiple [-lrtsdpg] PACKAGE...
     push package(s) to the device and install them
     -l: forward lock application
     -r: replace existing application
     -t: allow test packages
     -s: install application on sdcard
     -d: allow version code downgrade (debuggable packages only)
     -p: partial application install (install-multiple only)
     -g: grant all runtime permissions
 uninstall [-k] PACKAGE
     remove this app package from the device
     '-k': keep the data and cache directories

backup/restore:
 backup [-f FILE] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] [-all] [-system|-nosystem] [PACKAGE...]
     write an archive of the device's data to FILE [default=backup.adb]
     package list optional if -all/-shared are supplied
     -apk/-noapk: do/don't back up .apk files (default -noapk)
     -obb/-noobb: do/don't back up .obb files (default -noobb)
     -shared|-noshared: do/don't back up shared storage (default -noshared)
     -all: back up all installed applications
     -system|-nosystem: include system apps in -all (default -system)
 restore FILE             restore device contents from FILE

debugging:
 bugreport [PATH]
     write bugreport to given PATH [default=bugreport.zip];
     if PATH is a directory, the bug report is saved in that directory.
     devices that don't support zipped bug reports output to stdout.
 jdwp                     list pids of processes hosting a JDWP transport
 logcat                   show device log (logcat --help for more)

security:
 disable-verity           disable dm-verity checking on userdebug builds
 enable-verity            re-enable dm-verity checking on userdebug builds
 keygen FILE
     generate adb public/private key; private key stored in FILE,
     public key stored in FILE.pub (existing files overwritten)

scripting:
 wait-for[-TRANSPORT]-STATE
     wait for device to be in the given state
     State: device, recovery, sideload, or bootloader
     Transport: usb, local, or any [default=any]
 get-state                print offline | bootloader | device
 get-serialno             print <serial-number>
 get-devpath              print <device-path>
 remount
     remount /system, /vendor, and /oem partitions read-write
 reboot [bootloader|recovery|sideload|sideload-auto-reboot]
     reboot the device; defaults to booting system image but
     supports bootloader and recovery too. sideload reboots
     into recovery and automatically starts sideload mode,
     sideload-auto-reboot is the same but reboots after sideloading.
 sideload OTAPACKAGE      sideload the given full OTA package
 root                     restart adbd with root permissions
 unroot                   restart adbd without root permissions
 usb                      restart adb server listening on USB
 tcpip PORT               restart adb server listening on TCP on PORT

internal debugging:
 start-server             ensure that there is a server running
 kill-server              kill the server if it is running
 reconnect                kick connection from host side to force reconnect
 reconnect device         kick connection from device side to force reconnect

environment variables:
 $ADB_TRACE
     comma-separated list of debug info to log:
     all,adb,sockets,packets,rwx,usb,sync,sysdeps,transport,jdwp
 $ADB_VENDOR_KEYS         colon-separated list of keys (files or directories)
 $ANDROID_SERIAL          serial number to connect to (see -s)
 $ANDROID_LOG_TAGS        tags to be used by logcat (see logcat --help)

C:\>

 

 

Android 命令

 

  使用 Android命令的前提条件,一定要将 sdk\tools 目录放到环境变量中。

  使用 android -h 获取帮助信息。android list device 和 adb devices 输出的内容不一致,应该是 android 输出的并不是已经运行的设备,而是其能创建虚拟机的设备列表,使用 eclipse 创建虚拟机的时候,可以选择的那个列表。另外 android 命令执行的时间比较长。android 命令没有特别去操作,只是在网上看到很多人写的博客中都有 android 命令,但是自己用的时候却提示不是内部或外部命令。所以将使用android命令的前提写出来。

  android 包含很多子命令。可以通过以下方式查看子命令的帮助信息:

  例如查看创建模拟器子命令的帮助信息:android -h create avd

  在sdk\tools目录中,不止有android命令。还有ddms等命令,可以操作一下试试。

 

 

 

ADB常用命令

 

常用命令:

adb version                             查看 adb 版本
adb devices                             查询已连接设备/模拟器
adb start-server                        启动 adb server 命令
adb kill-server                         停止 adb server 命令
adb -P <port> start-server              指定 adb server 的网络端口
adb connect <device-ip-address>         通过 IP 地址连接设备
adb disconnect <device-ip-address>      断开无线连接

adb reboot                              重启
adb pull <remote> <local>               从设备拷贝东西到PC上
adb push <local> <remote>               从PC拷贝东西到设备上 

adb logcat                              查看日志
adb logcat -c                           清空日志
adb bugreport                           查看bug报告
adb disable-verity
adb enable-verity
adb keygen <file>
adb jdwp
adb sync [<directory>] 
adb emu
adb restore
adb backup [-f <file>] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] 
           [-all] [-system|-nosystem] [<packages ... >]


abd -s 模拟器编号 命令                  对某一模拟器执行命令
adb -s 模拟器编号 shell wm size         指定设备获取屏幕分辨率
adb -s 模拟器编号 install test.apk      给指定设备安装应用
        C:\>adb devices
        List of devices attached
        emulator-5554
        emulator-5556
        
        C:\>adb -s emulator-5554 shell wm size
        Physical size: 900x1600

adb install -r 应用程序.apk             安装应用程序
adb install [-lrtsdg] <file>            安装app
adb install-multiple [-lrtsdpg] <file ... >

adb uninstall [-k] <packagename>        卸载app,<packagename> 表示应用的包名
                                        -k 参数可选,表示卸载应用但保留数据和缓存目录

adb shell                               进入设备的 shell 命令
adb shell pm list packages              查看所有应用
adb shell pm list packages -s           查看系统应用
adb shell pm list packages -3           查看第三方应用
adb shell pm list packages | grep qq    使用 grep 来过滤
adb shell pm clear <packagename>        清除应用数据与缓存。
                                        如:adb shell pm clear com.stormzhang.demo

adb shell am start -n com.stormzhang.demo/.ui.SplashActivity       通过 adb 来启动应用
adb shell am start -D -n com.stormzhang.demo/.ui.SplashActivity    -D 表示以 Debug模式启动应用
adb shell am force-stop <packagename>   强制停止应用。有些时候应用卡死了,需要强制停止。
                                        如:adb shell am force-stop cn.androidstar.demo
adb shell input keyevent 26             电源键
adb shell input keyevent 82             菜单键
adb shell input keyevent 3              HOME 键
adb shell input keyevent 4              返回键
adb shell input keyevent 24             增加音量
adb shell input keyevent 25             降低音量
adb shell input keyevent 164            静音
adb shell input keyevent 85             播放/暂停
adb shell input keyevent 86             停止播放
adb shell input keyevent 87             播放下一首
adb shell input keyevent 88             播放上一首
adb shell input keyevent 126            恢复播放
adb shell input keyevent 127            暂停播放
adb shell input swipe 300 1000 300 500  滑动解锁。参数 300 1000 300 500
                                        起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标。
adb shell input text hello              输入文本

adb shell getprop ro.product.model            查看设备型号
adb shell wm size                             屏幕分辨率
adb shell wm density                          屏幕密度
adb shell dumpsys battery                     电池状况
adb shell dumpsys window displays             显示屏参数
adb shell dumpsys activity top                查看当前活动页面
adb shell getprop ro.build.version.release    查看Android 系统版本
adb shell ifconfig | grep Mask                查看IP 地址
adb shell cat /sys/class/net/wlan0/address    Mac 地址
adb shell cat /proc/cpuinfo                   CPU 信息
adb shell cat /proc/meminfo                   内存信息
adb get-serialno                              获取序列号


adb shell monkey -p <packagename> -v 500      使用 Monkey 进行压力测试
                                              表示向 <packagename> 指定的应用程序发送 500 个伪随机事件
adb shell ps        查看进程
adb shell top       查看实时资源占用情况

adb forward <local> <remote> 将特定端口上的请求转发到模拟器或手机的指定端口上。
adb forward --no-rebind <local> <remote>  
adb forward --list  
adb forward --remove <local>
adb forward --remove-all

adb reverse <remote> <local>
adb reverse --norebind <remote> <local>
adb reverse --list
adb reverse --remove <remote>
adb reverse --remove-all


缷载 apk 包:
        adb shell
        cd data/app
        rm apk包
        exit
        adb uninstall apk包的主包名
        adb install -r apk包

查看 adb 命令帮助信息:
        adb help

在命令行中查看LOG信息:      
        adb logcat -s 标签名

adb shell后面跟的命令主要来自:
    源码\system\core\toolbox目录和源码\frameworks\base\cmds目录。

删除系统应用:
    adb remount (重新挂载系统分区,使系统分区重新可写)。
    adb shell
    cd system/app
    rm *.apk

获取管理员权限:
    adb root

启动Activity:
    adb shell am start -n 包名/包名+类名(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)。

发布端口:
    你可以设置任意的端口号,做为主机向模拟器或设备的请求端口。如: 
    adb forward tcp:5555 tcp:8000

复制文件:
    你可向一个设备或从一个设备中复制文件, 
    复制一个文件或目录到设备或模拟器上: 
    adb push <source> <destination></destination></source> 
    如:adb push test.txt /tmp/test.txt 
    从设备或模拟器上复制一个文件或目录: 
    adb pull <source> <destination></destination></source> 
    如:adb pull /addroid/lib/libwebcore.so .

搜索模拟器/设备的实例:
    取得当前运行的模拟器/设备的实例的列表及每个实例的状态: 
    adb devices

查看bug报告: 
    adb bugreport 
记录无线通讯日志:
    一般来说,无线通讯的日志非常多,在运行时没必要去记录,
    但我们还是可以通过命令,设置记录: 
    adb shell 
    logcat -b radio

获取设备的ID和序列号:
    adb get-product 
    adb get-serialno

访问数据库SQLite3
    adb shell 
    sqlite3

# cd system/sd/data    // 进入系统内指定文件夹 
# ls                   // 列表显示当前文件夹内容 
# rm -r xxx            // 删除名字为xxx的文件夹及其里面的所有文件 
# rm xxx               // 删除文件xxx 
# rmdir xxx            // 删除xxx的文件夹



ADB IDEA
    以上命令你们觉得是不是很方便了?
    但是在用 Android Studio 开发的时候如果有一款插件是不是更方便了?
    推荐一个 AS 插件 ADB IDEA ,这个插件可以直接在AS中快速操作一些 ADB 命令,非常方便。

安装完成后,快捷键直接唤起:
        Mac OSX:        Ctrl+Shift+A
        Windows/Linux:  Ctrl+Alt+Shift+A

 

 

连接设备相关:

 

  adb -a 命令针对所有的设备,需要与命令一起使用,例如 adb -a push <local> <remote>

  adb -d 命令针对真机,需要与命令一起使用。如果有多个模拟器或手机,当使用adb命令的时候就需要指定目标设备。

  adb -e 命令针对虚拟机,需要与命令一起使用。如果有多个模拟器或手机,当使用adb命令的时候就需要指定目标设备。

  adb -s <specific device> 命令针对指定设备,需要与命令一起使用。如果有多个模拟器或手机,当使用adb命令的时候就需要指定目标设备。

  adb -p <product name or path>

  adb -H 访问其他机器上的adb service

  adb -P 访问其他机器上的adb service

  adb devices [-l] 列出所有的设备,实际列出的就是设备的serialnumber,可以通过-s指定列出的serialNumber找到对应的设备

  adb connect <host>[:<port>] 

  adb disconnect[<host>[:<port>]] 

  

scripting :

  adb wait-for-device

  adb start-server 启动adb server

  adb kill-server 停止adb server

  adb get-state 列出设备状态: offline | bootloader | device

  adb get-serialno 列出设备的serial number

  adb get-devpath 

  adb remount 从新挂载系统分区,使其可写(system、vendor、oem目录)

  adb reboot [bootloader|recovery] 

  adb reboot sideload

  adb reboot sideload-auto-reboot

  adb sideload <file>

  adb root  重启adbd并获得root权限

  adb unroot  重启adbd并释放root权限

  adb usb

  adb tcpip <port>

 

 

Android 系统对应的命令(部分为linux命令)

adb shell am start -n <package_name>/.<activity_class_name>  // 启动应用

adb shell top        // 查看设备cpu和内存占用情况
adb shell top -m 6     // 查看占用内存前6的app
adb shell top -n 1    // 刷新一次内存信息,然后返回
adb shell procrank     // 查询各进程内存使用情况
adb shell kill [pid]    // 杀死一个进程
adb shell ps        // 查看进程列表
adb shell ps -x [PID]    // 查看指定进程状态

adb shell service list   // 查看后台services信息

 

emulator命令

可以使用emulator命令启动模拟器。

emulator -avd <avd名称>

emulator -data 镜像文件名称

 

 

连接真机的两种方式

 

 可以通过两种方式连接真机,通过usb连接,也可以通过局域网连接,如下图所示。通过局域网连接的方式需要使用命令adb connect <host>[:<port>],断开连接的方式 adb disconnect[<host>[:<port>]]

 

 

查看版本
    $ adb version
    Android Debug Bridge version 1.0.36
    Revision 8f855a3d9b35-android

查看连接设备
    输入以下命令可以查询已连接的设备与模拟器:
    $ adb devices
    List of devices attached
    02ae0c1021089daf       device

安装一个apk,执行以下命令:
    adb install <apkfile>
    // 如: adb install demo.apk
    如果不是当前目录,则后面要跟路径名:
    adb install /Users/storm/temp/demo.apk
    保留数据和缓存文件,重新安装apk:
    adb install -r demo.apk
    安装apk到sd卡:
    adb install -s demo.apk

卸载
    直接卸载:
    adb uninstall <package>
    // 如:adb uninstall com.stormzhang.demo
    卸载 app 但保留数据和缓存文件:
    adb uninstall -k com.stormzhang.demo

启动/停止 Server
    一般来说,下面两个命令基本不会用到,因为只要设备连接正确,会自动启动 adb server 的,不过大家也需要知道这俩命令:
    启动 adb server :
    adb start-server
    停止 adb server :
    adb kill-server

列出手机装的所有app的包名:
    adb shell pm list packages

列出系统应用的所有包名:
    adb shell pm list packages -s

列出除了系统应用的第三方应用包名:
    adb shell pm list packages -3

使用 grep 来过滤:
    adb shell pm list packages | grep qq

清除应用数据与缓存
    有些时候我们测试需要清除数据与缓存,则需要用到如下命令:
    adb shell pm clear <packagename>
    // 如:adb shell pm clear com.stormzhang.demo

启动应用
    如果我们想要通过 adb 来启动应用
    adb shell am start -n com.stormzhang.demo/.ui.SplashActivity

强制停止应用
    有些时候应用卡死了,需要强制停止,则执行以下命令:
    adb shell am force-stop <packagename>
    // 如:adb shell am force-stop cn.androidstar.demo

查看日志
    adb logcat

重启
    adb reboot

获取序列号
    $adb get-serialno
    02ae0c1021089daf

获取 MAC 地址
    $adb shell  cat /sys/class/net/wlan0/address
    bc:f5:ac:f9:f7:c8

查看设备型号
    $adb shell getprop ro.product.model
    Nexus 5

查看 Android 系统版本
    $adb shell getprop ro.build.version.release
    7.0.1

查看屏幕分辨率
    $adb shell wm size
    Physical size: 1080×1920

查看屏幕密度
    $adb shell wm density
    Physical density: 480

关于 ADB 的命令有太多,以上只列了一些我比较常用的命令,关于更多的命令可以见这里:
https://github.com/mzlogin/awesome-adb

ADB IDEA
以上命令你们觉得是不是很方便了?但是我们在用 Android Studio 开发的时候如果有一款插件是不是更方便了?所以这里推荐一个 AS 插件 ADB IDEA ,装了这款插件可以直接在 AS 中快速操作一些 ADB 命令,非常方便。

安装完成后,快捷键直接唤起:

Mac OSX: Ctrl+Shift+A
Windows/Linux: Ctrl+Alt+Shift+A