200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > ADB 操作命令详解及用法大全

ADB 操作命令详解及用法大全

时间:2023-04-09 21:23:31

相关推荐

ADB 操作命令详解及用法大全

一、ADB是什么?

ADB,即 Android Debug Bridge 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。可以在Android SDK/platform-tools中找到adb工具或下载 ADB Kits 。

注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。

二、ADB有什么作用?

ADBAndroid SDK里的一个工具, 用这个工具可以直接操作管理Android模拟器或者真实的Android设备。它的主要功能有:

在设备上运行Shell命令;将本地APK软件安装至模拟器或Android设备;管理设备或手机模拟器上的预定端口;在设备或手机模拟器上复制或粘贴文件。

ADB是一个客户端-服务器程序程序,包括三个组件:

客户端:该组件发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。后台程序:该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。服务器:该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。

三、ADB命令语法

adb 命令的基本语法如下:

adb [-d|-e|-s <serial-number>] <command>复制代码

单一设备/模拟器连接

如果只有一个设备/模拟器连接时,可以省略掉[-d|-e|-s <serial-number>]这一部分,直接使用adb <command>

多个设备/模拟器连接

如果有多个设备/模拟器连接,则需要为命令指定目标设备,下表是指定目标设备的命令选项:

在多个设备/模拟器连接的情况下较常用的是-s <serial-number>参数,serial-number是指设备的设备序列号,可以通过adb devices命令获取。

四、ADB常用命令

4.1 基本命令

4.1.1 查看adb的版本信息

adb version复制代码

4.1.2 启动adb

adb start-server复制代码

一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起。

4.1.3 停止adb

adb kill-server复制代码

4.1.4 以 root 权限运行 adbd

adb root复制代码

4.1.5 指定 adb server 的网络端口

adb -P <port> start-server复制代码

ADB的默认端口为 5037。

4.1.5 查询已连接的设备/模拟器列表

adb devices复制代码

4.2 设备连接管理

4.2.1 USB 连接

通过 USB 连接来正常使用 adb 需要以下步骤:

确认硬件状态正常(包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好)。Android 设备的开发者选项和 USB 调试模式已开启(可以在「设置」-「开发者选项」-「USB调试」打开USB调试)。确认设备驱动状态正常(安装ADB驱动程序)。通过 USB 线连接好电脑和设备后确认状态。通过adb devices命令查看设备连接情况。

4.2.2 WLAN 连接(需要 USB 线)

借助 USB 通过 WiFi 连接来正常使用 adb 需要以下步骤: 操作步骤:

将 Android 设备与要运行 adb 的电脑连接到同一个 WiFi。将设备与电脑通过 USB 线连接(可通过adb devices命令查看设备连接情况)。通过adb tcpip 5555命令让设备在 5555 端口监听 TCP/IP 连接。断开 USB 连接。找到设备的 IP 地址(可以在「设置」-「关于手机」-「状态信息」-「IP地址」查看 IP 地址)。通过adb connect <device-ip-address>命令使用 IP 地址将 Android 设备与电脑连接。通过adb devices命令查看设备连接情况。使用完毕后可通过adb disconnect <device-ip-address>命令断开无线连接。

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

注:需要 root 权限。不借助 USB 通过 WiFi 连接来正常使用 adb 需要以下步骤:

在 Android 设备上安装一个终端模拟器(可通过Terminal Emulator for Android Downloads下载)。将 Android 设备与要运行 adb 的电脑连接到同一个 WiFi。打开 Android 设备上的终端模拟器,在里面依次运行命令:

susetprop service.adb.tcp.port 5555复制代码

找到设备的 IP 地址(可以在「设置」-「关于手机」-「状态信息」-「IP地址」查看 IP 地址)。通过adb connect <device-ip-address>命令使用 IP 地址将 Android 设备与电脑连接。通过adb devices命令查看设备连接情况。

4.2.4 WiFi 连接转为 USB 连接

通过adb usb命令以USB模式重新启动ADB:

adb usb复制代码

4.3 应用管理

4.3.1 查看应用列表

查看应用列表的基本命令格式是:

adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]复制代码

adb shell pm list packages后面可以跟一些可选参数进行过滤查看不同的列表,可用参数及含义如下:

4.3.1.1 查看所有应用

adb shell pm list packages复制代码

4.3.1.2 查看系统应用

adb shell pm list packages -s复制代码

4.3.1.3 查看第三方应用

adb shell pm list packages -3复制代码

4.3.1.4 包名包含某字符串的应用

比如要查看包名包含字符串huawei的应用列表,命令:

adb shell pm list packages huawei复制代码

4.3.2 安装应用

安装应用的基本命令格式是:

adb install [-l] [-r] [-t] [-s] [-d] [-g] <apk-file>复制代码

adb install后面可以跟一些可选参数来控制安装 APK 的行为,可用参数及含义如下:

运行命令后可以看到输出内容,包含安装进度和状态,安装状态如下:

Success:代表安装成功。Failure:代表安装失败。 APK 安装失败的情况有很多,Failure状态之后有安装失败输出代码。常见安装失败输出代码、含义及可能的解决办法如下:

参考:PackageManager.java

adb install实际是分三步完成:

push apk 文件到 /data/local/tmp。调用 pm install 安装。删除 /data/local/tmp 下的对应 apk 文件。

4.3.3 卸载应用

卸载应用的基本命令格式是:

adb uninstall [-k] <package-name>复制代码

<package-name>表示应用的包名,-k参数可选,表示卸载应用但保留数据和缓存目录。

4.3.4 清除应用数据与缓存

adb shell pm clear <package-name>复制代码

<package-name>表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。

4.3.5 查看前台 Activity

adb shell dumpsys activity activities | grep mFocusedActivity复制代码

4.3.6 查看正在运行的 Services

adb shell dumpsys activity services [<package-name>]复制代码

<package-name>参数不是必须的,指定<package-name>表示查看与某个包名相关的 Services,不指定表示查看所有 Services。<package-name>不一定要给出完整的包名,可以只给一部分,那么所给包名相关的 Services 都会列出来。

4.3.7 查看应用详细信息

adb shell dumpsys package <package-name>复制代码

<package-name>表示应用包名。运行次命令的输出中包含很多信息,包括 Activity Resolver Table、Registered ContentProviders、包名、userId、安装后的文件资源代码等路径、版本信息、权限信息和授予状态、签名版本信息等。

4.3.7 查看应用安装路径

adb shell pm path <package-name>复制代码

4.4 与应用交互

与应用交互主要是使用am <command>命令,常用的<command>如下:

<intent>参数很灵活,和写 Android 程序时代码里的 Intent 相对应。

用于决定 intent 对象的选项如下:

<intent>里还能带数据,就像写代码时的 Bundle 一样:

4.4.1 启动应用/ 调起 Activity

adb shell am start [options] <intent>复制代码

例如:

adb shell am start -a android.settings.SETTINGS # 打开系统设置页面adb shell am start -a android.intent.action.DIAL -d tel:10086# 打开拨号页面adb shell am start -n com.android.mms/.ui.ConversationList # 打开短信会话列表复制代码

options 是一些改变其行为的选项,支持的可选参数及含义如下:

4.4.2 调起 Service

adb shell am startservice [options] <intent>复制代码

一个典型的用例是如果设备上原本应该显示虚拟按键但是没有显示,可以试试这个:

adb shell am startservice -n com.android.systemui/.SystemUIService复制代码

4.4.3 停止 Service

adb shell am stopservice [options] <intent>复制代码

4.4.4 发送广播

adb shell am broadcast [options] <INTENT>复制代码

可以向所有组件广播,也可以只向指定组件广播。

例如,向所有组件广播BOOT_COMPLETED

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED复制代码

又例如,只向com.android.receiver.test/.BootCompletedReceiver广播BOOT_COMPLETED

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.android.receiver.test/.BootCompletedReceiver复制代码

这类用法在测试的时候很实用,比如某个广播的场景很难制造,可以考虑通过这种方式来发送广播。

既能发送系统预定义的广播,也能发送自定义广播。如下是部分系统预定义广播及正常触发时机:

(以上广播均可使用 adb 触发)

4.4.5 强制停止应用

adb shell am force-stop <packagename>复制代码

4.4.6 收紧内存

adb shell am send-trim-memory <pid> <level>复制代码

参数说明:

pid: 进程 IDlevel:HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE

4.5 文件管理

4.5.1 从模拟器/设备下载指定的文件到计算机

从模拟器/设备下载指定的文件到计算机的基本命令格式是:

adb pull <remote> [local]复制代码

参数说明:

remote: 模拟器/设备里的文件路径local:计算机上的目录,参数可以省略,默认复制到当前目录

例如,将 /sdcard/music.mp4 下载到计算机的当前目录:

adb pull /sdcard/music.mp4复制代码

将 /sdcard/music.mp4 下载到计算机的当前目录(目录需存在):

adb pull /sdcard/music.mp4 D:\Download复制代码

4.5.2 将指定的文件从计算机上传到模拟器/设备

将指定的文件从计算机上传到模拟器/设备的基本命令格式是:

adb push <local> <remote>复制代码

参数说明:

local:计算机上的文件路径remote: 模拟器/设备里的目录

例如,将 D:\Download\music.mp4 下载到设备的/sdcard/music/目录:

adb push D:\Download\music.mp4 /sdcard/music/复制代码

4.5.4 列出指定目录的内容

列出模拟器/设备上指定目录的内容的基本命令格式是:

adb shell ls [options] <directory>复制代码

<directory>表示指定目录,可以省略,表示列出根目录下的所有文件和目录。adb shell ls后面可以跟一些可选参数进行过滤查看不同的列表,可用参数及含义如下:

4.5.5 切换到目标目录

adb shell cd <directory>复制代码

第一步:执行adb shell命令; 第二步:执行cd <directory>命令切换到目标目录。

4.5.6 删除文件或目录

adb shell rm [options] <files or directory>复制代码

第一步:执行adb shell命令; 第二步:执行rm [options] <files or directory>命令删除文件或目录。

rm后面可以跟一些可选参数进行不同的操作,可用参数及含义如下:

rm -d等同于rmdir命令,有些版本不包含-d参数。

4.5.7 创建目录

adb shell mkdir [options] <directory-name>复制代码

第一步:执行adb shell命令; 第二步:执行mkdir [options] <directory-name>命令创建目录。mkdir后面可以跟一些可选参数进行不同的操作,可用参数及含义如下:

4.5.8 创建空文件或改变文件时间戳

adb shell touch [options] <file>复制代码

第一步:执行adb shell命令; 第二步:执行touch [options] <file>命令创建空文件或改变文件时间戳。

可通过ls -n <directory>命令查看文件的时间。

4.5.9 输出当前目录路径

adb shell pwd复制代码

第一步:执行adb shell命令; 第二步:执行pwd命令输出当前目录路径。

4.5.10 复制文件和目录

adb shell cp [options] <source> <dest>复制代码

第一步:执行adb shell命令; 第二步:执行cp [options] <source> <dest>命令复制文件和目录。 参数说明:

source:源文件路径dest: 目标文件路径

4.5.11 移动或重命名文件

adb shell mv [options] <source> <dest>复制代码

第一步:执行adb shell命令; 第二步:执行mv [options] <source> <dest>命令移动或重命名文件。 参数说明:

source:源文件路径dest: 目标文件路径

4.6 网络管理

4.6.1 查看网络统计信息

adb shell netstat复制代码

也可以将网络统计信息输出到指定文件:

adb shell netstat><file-path>复制代码

例如,可以通过adb shell netstat>D:\netstat.log将日志输出到D:\netstat.log中。

4.6.2 测试两个网络间的连接和延迟

ping命令的格式如下:

adb shell ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface][-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos][-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option][-w deadline] [-W timeout] [hop1 ...] destination复制代码

例如,ping一个域名:

adb shell ping 复制代码

不结束的话会一直ping下去,可以按Ctrl + C停止ping操作。

也可以指定ping的次数:

adb shell ping -c 4 复制代码

4.6.3 通过配置文件配置和管理网络连接

netcfg命令的格式如下:

adb shell netcfg [<interface> {dhcp|up|down}]复制代码

输出示例:

rmnet_ims10 DOWN0.0.0.0/0 0x00001002rmnet_ims00 DOWN0.0.0.0/0 0x00001002rmnet_tun04 DOWN0.0.0.0/0 0x00001002rmnet_tun03 DOWN0.0.0.0/0 0x00001002rmnet_tun02 DOWN0.0.0.0/0 0x00001002rmnet_tun01 DOWN0.0.0.0/0 0x00001002rmnet_tun00 DOWN0.0.0.0/0 0x00001002rmnet_tun14 DOWN0.0.0.0/0 0x00001002rmnet_tun13 DOWN0.0.0.0/0 0x00001002rmnet_tun12 DOWN0.0.0.0/0 0x00001002rmnet_tun11 DOWN0.0.0.0/0 0x00001002rmnet_tun10 DOWN0.0.0.0/0 0x00001002rmnet1 DOWN0.0.0.0/0 0x00001002rmnet0 DOWN0.0.0.0/0 0x00001002rmnet4 DOWN0.0.0.0/0 0x00001002rmnet3 DOWN0.0.0.0/0 0x00001002rmnet2 DOWN0.0.0.0/0 0x00001002rmnet6 DOWN0.0.0.0/0 0x00001002rmnet5 DOWN0.0.0.0/0 0x00001002dummy0 UP 0.0.0.0/0 0x000000c3rmnet_r_ims10 DOWN0.0.0.0/0 0x00001002rmnet_r_ims00 DOWN0.0.0.0/0 0x00001002rmnet_emc0 DOWN0.0.0.0/0 0x00001002lo UP127.0.0.1/8 0x00000049sit0DOWN0.0.0.0/0 0x00000080wlan0 UP 10.0.38.176/23 0x00001043复制代码

4.6.4 显示、操作路由、设备、策略路由和隧道

ip命令的格式如下:

adb shell ip [ options ] object复制代码

options := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |-f[amily] { inet | inet6 | ipx | dnet | link } |-l[oops] { maximum-addr-flush-attempts } |-o[neline] | -t[imestamp] | -b[atch] [filename] |-rc[vbuf] [size]}

object := { link | addr | addrlabel | route | rule | neigh | ntable |tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |netns | l2tp }

options是一些修改ip行为或者改变其输出的选项。所有的选项都是以-字符开头,分为长、短两种形式,支持的可选参数及含义如下:

object是你要管理或者获取信息的对象。目前ip认识的对象包括:

例如,查看WiFi IP地址:

adb shell ip -f inet addr show wlan0复制代码

4.7 模拟按键/输入

adb shell里有个很实用的命令叫input,通过它可以做一些有趣的事情。 可以执行adb shell input命令查看完整 help 信息如下:

Usage: input [<source>] <command> [<arg>...]The sources are:dpadkeyboardmousetouchpadgamepadtouchnavigationjoysticktouchscreenstylustrackballThe commands and default sources are:text <string> (Default: touchscreen)keyevent [--longpress] <key code number or name> ... (Default: keyboard)tap <x> <y> (Default: touchscreen)swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)draganddrop <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)press (Default: trackball)roll <dx> <dy> (Default: trackball)复制代码

比如使用adb shell input keyevent <keycode>命令,不同的 keycode 能实现不同的功能,完整的 keycode 列表详见 KeyEvent,摘引部分我觉得有意思的如下:

下面是input命令的一些用法举例。

4.7.1 电源键

adb shell input keyevent 26复制代码

执行效果相当于按电源键。

4.7.2 菜单键

adb shell input keyevent 82复制代码

4.7.3 HOME 键

adb shell input keyevent 3复制代码

4.7.4 返回键

adb shell input keyevent 4复制代码

4.7.5 音量控制

增加音量:

adb shell input keyevent 24复制代码

降低音量:

adb shell input keyevent 25复制代码

静音:

adb shell input keyevent 164复制代码

4.7.6 媒体控制

播放/暂停:

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复制代码

4.7.7 点亮/熄灭屏幕

点亮屏幕:

adb shell input keyevent 224复制代码

熄灭屏幕:

adb shell input keyevent 223复制代码

4.7.8 滑动解锁

如果锁屏没有密码,是通过滑动手势解锁,那么可以通过input swipe来解锁。 命令(参数以机型 Nexus 5,向上滑动手势解锁举例):

adb shell input swipe 300 1000 300 500复制代码

参数300 1000 300 500分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标

4.7.9 输入文本

在焦点处于某文本框时,可以通过input命令来输入文本。

adb shell input text hello复制代码

4.8 日志打印

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

4.8.1 Android 日志

查看 Android 设备系统属性的基本命令格式是:

adb logcat [option] [filter-specs]复制代码

如果需要停止logcat日志打印,可以按Ctrl + C停止日志监控。

4.8.1.1 按级别过滤日志

按级别过滤日志的基本命令格式是:

adb logcat [filter-specs]复制代码

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

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

比如,命令:

adb logcat *:W复制代码

会将 Warning、Error、Fatal 和 Silent 日志输出。

注:在 macOS 下需要给*:W这样以*作为 tag 的参数加双引号,如adb logcat "*:W",不然会报错no matches found: *:W。)

4.8.1.2 按 tag 和级别过滤日志

按 tag 和级别过滤日志的基本命令格式是:

adb logcat [tag:level] [tag:level] ...复制代码

比如,命令:

adb logcat ActivityManager:I MyApp:D *:S复制代码

表示输出 tagActivityManager的 Info 以上级别日志,输出 tagMyApp的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。

4.8.1.3 将日志格式化输出

可以用adb logcat -v <format>选项指定日志输出格式。

日志支持按以下几种<format>

日志格式默认为brief,指定格式可与上面的过滤同时使用。比如:

adb logcat -v long ActivityManager:I *:S复制代码

4.8.1.3 清空已存在的日志

adb logcat -c复制代码

4.8.1.4 将日志显示在控制台

adb logcat -d复制代码

4.8.1.5 将日志输出到文件

adb logcat -f <file-path>复制代码

4.8.1.6 加载一个可使用的日志缓冲区供查看

adb logcat -b <Buffer>复制代码

Android log输出量巨大,特别是通信系统的log,因此,Android把log输出到不同的缓冲区中,目前定义了四个log缓冲区:

缓冲区主要给系统组件使用,一般的应用不需要关心,应用的log都输出到main缓冲区中。默认log输出(不指定缓冲区的情况下)是输出System和Main缓冲区的log。

4.8.1.7 打印指定日志缓冲区的大小

adb logcat -g复制代码

4.8.2 内核日志

adb shell dmesg复制代码

输出示例:

<6>[14201.684016] PM: noirq resume of devices complete after 0.982 msecs<6>[14201.685525] PM: early resume of devices complete after 0.838 msecs<6>[14201.753642] PM: resume of devices complete after 68.106 msecs<4>[14201.755954] Restarting tasks ... done.<6>[14201.771229] PM: suspend exit -08-28 13:31:32.679217193 UTC<6>[14201.872373] PM: suspend entry -08-28 13:31:32.780363596 UTC<6>[14201.872498] PM: Syncing filesystems ... done.复制代码

中括号里的[14201.684016]代表内核开始启动后的时间,单位为秒。

通过内核日志我们可以做一些事情,比如衡量内核启动时间,在系统启动完毕后的内核日志里找到Freeing init memory那一行前面的时间就是。

4.9 查看 Android 设备系统属性

查看 Android 设备系统属性的基本命令格式是:

adb shell getprop [options]复制代码

除了可以查看 Android 设备系统属性之外,还可以设置系统属性,设置系统属性的基本命令格式是:

adb shell setprop <key> <value>复制代码

4.9.1 查看设备型号

adb shell getprop ro.product.model复制代码

输出示例:

Nexus 5复制代码

4.9.2 查看设备电池状况

adb shell dumpsys battery复制代码

输出示例:

Current Battery Service state:AC powered: falseUSB powered: trueWireless powered: falsestatus: 2health: 2present: truelevel: 44scale: 100voltage: 3872temperature: 280technology: Li-poly复制代码

其中scale代表最大电量,level代表当前电量。上面的输出表示还剩下 44% 的电量。

4.9.3 查看设备屏幕分辨率

adb shell wm size复制代码

输出示例:

Physical size: 1080x1920复制代码

该设备屏幕分辨率为 1080px * 1920px。

如果使用命令修改过,那输出可能是:

Physical size: 1080x1920Override size: 480x1024复制代码

表明设备的屏幕分辨率原本是 1080px * 1920px,当前被修改为 480px * 1024px。

4.9.4 查看设备屏幕密度

adb shell wm density复制代码

输出示例:

Physical density: 420复制代码

该设备屏幕密度为 420dpi。

如果使用命令修改过,那输出可能是:

Physical density: 480Override density: 160复制代码

表明设备的屏幕密度原来是 480dpi,当前被修改为 160dpi。

4.9.5 查看设备显示屏参数

adb shell dumpsys window displays复制代码

输出示例:

WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)Display: mDisplayId=0init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1810x1731deferred=false layoutNeeded=false复制代码

其中mDisplayId为 显示屏编号,init是初始分辨率和屏幕密度,app的高度比init里的要小,表示屏幕底部有虚拟按键,高度为 1920 - 1794 = 126px 合 42dp。

4.9.6 查看设备 android_id

adb shell settings get secure android_id复制代码

输出示例:

51b6be48bac8c569复制代码

4.9.7 查看设备IMEI

在 Android 4.4 及以下版本可通过如下命令获取 IMEI:

adb shell dumpsys iphonesubinfo复制代码

输出示例:

Phone Subscriber Info:Phone Type = GSMDevice ID = 860955027785041复制代码

其中的Device ID就是 IMEI。

而在 Android 5.0 及以上版本里这个命令输出为空,得通过其它方式获取了(需要 root 权限):

adb shellsuservice call iphonesubinfo 1复制代码

把里面的有效内容提取出来就是 IMEI 了,比如这里的是860955027785041

参考:adb shell dumpsys iphonesubinfo not working since Android 5.0 Lollipop

4.9.8 查看设备 Android 系统版本

adb shell getprop ro.build.version.release复制代码

输出示例:

5.0.2复制代码

4.9.9 查看设备 IP 地址

adb shell ifconfig | grep Mask复制代码

在有的设备上这个命令没有输出,如果设备连着 WiFi,可以使用如下命令来查看局域网 IP:

adb shell ifconfig wlan0复制代码

如果以上命令仍然不能得到期望的信息,那可以试试以下命令(部分系统版本里可用):

adb shell netcfg复制代码

4.9.10 查看设备 Mac 地址

adb shell cat /sys/class/net/wlan0/address复制代码

输出示例:

f8:a9:d0:17:42:4d复制代码

这查看的是局域网 Mac 地址,移动网络或其它连接的信息可以通过前面的小节「IP 地址」里提到的adb shell netcfg命令来查看。

4.9.11 查看设备 CPU 信息

adb shell cat /proc/cpuinfo复制代码

4.9.12 查看设备内存信息

adb shell cat /proc/meminfo复制代码

4.9.13 查看设备更多硬件与系统属性

设备的更多硬件与系统属性可以通过如下命令查看:

adb shell cat /system/build.prop复制代码

这会输出很多信息,包括前面几个小节提到的「型号」和「Android 系统版本」等。

输出里还包括一些其它有用的信息,它们也可通过adb shell getprop <属性名>命令单独查看,列举一部分属性如下:

节注一:

一些小厂定制的 ROM 可能修改过 CPU 支持的 abi 列表的属性名,如果用ro.product.cpu.abilist属性名查找不到,可以这样试试:

adb shell cat /system/build.prop | grep ro.product.cpu.abi复制代码

示例输出:

ro.product.cpu.abi=armeabi-v7aro.product.cpu.abi2=armeabi复制代码

4.10 修改设置

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

修改设置的原理主要是通过 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的设置值。

4.10.1 修改分辨率

adb shell wm size 480x1024复制代码

表示将分辨率修改为 480px * 1024px。

恢复原分辨率命令:

adb shell wm size reset复制代码

4.10.2 修改屏幕密度

adb shell wm density 160复制代码

表示将屏幕密度修改为 160dpi。

恢复原屏幕密度命令:

adb shell wm density reset复制代码

4.10.3 修改显示区域

adb shell wm overscan 0,0,0,200复制代码

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

恢复原显示区域命令:

adb shell wm overscan reset复制代码

4.10.4 修改关闭 USB 调试模式

adb shell settings put global adb_enabled 0复制代码

用命令恢复不了了,毕竟关闭了 USB 调试 adb 就连接不上 Android 设备了。 去设备上手动恢复吧:「设置」-「开发者选项」-「Android 调试」。

4.10.5 修改允许/禁止访问非 SDK API

允许访问非 SDK API:

adb shell settings put global hidden_api_policy_pre_p_apps 1adb shell settings put global hidden_api_policy_p_apps 1复制代码

禁止访问非 SDK API:

adb shell settings delete global hidden_api_policy_pre_p_appsadb shell settings delete global hidden_api_policy_p_apps复制代码

不需要设备获得 Root 权限。

命令最后的数字的含义:

4.10.6 修改状态栏和导航栏的显示隐藏

adb shell settings put global policy_control <key-values>复制代码

<key-values>可由如下几种键及其对应的值组成,格式为<key1>=<value1>:<key2>=<value2>

这些键对应的值可则如下值用逗号组合:

例如:

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.package1com.package2的应用里隐藏状态栏,在除了包名为com.package3的所有应用里隐藏导航栏。

4.11 实用功能

4.11.1 屏幕截图

截图保存到电脑:

adb exec-out screencap -p > sc.png复制代码

如果 adb 版本较老,无法使用exec-out命令,这时候建议更新 adb 版本。无法更新的话可以使用以下麻烦点的办法:

先截图保存到设备里:

adb shell screencap -p /sdcard/sc.png复制代码

然后将 png 文件导出到电脑:

adb pull /sdcard/sc.png复制代码

可以使用adb shell screencap -h查看screencap命令的帮助信息,下面是两个有意义的参数及含义:

实测如果指定文件名以.png结尾时可以省略 -p 参数;否则需要使用 -p 参数。如果不指定文件名,截图文件的内容将直接输出到 stdout。

另外一种一行命令截图并保存到电脑的方法:Linux 和 Windows

adb shell screencap -p | sed "s/\r$//" > sc.png复制代码

Mac OS X

adb shell screencap -p | gsed "s/\r$//" > sc.png复制代码

这个方法需要用到 gnu sed 命令,在 Linux 下直接就有,在 Windows 下 Git 安装目录的 bin 文件夹下也有。如果确实找不到该命令,可以下载 sed for Windows 并将 sed.exe 所在文件夹添加到 PATH 环境变量里。

而在 Mac 下使用系统自带的 sed 命令会报错:

sed: RE error: illegal byte sequence复制代码

需要安装 gnu-sed,然后使用 gsed 命令:

brew install gnu-sed复制代码

4.11.2 录制屏幕

录制屏幕以 mp4 格式保存到 /sdcard:

adb shell screenrecord /sdcard/filename.mp4复制代码

需要停止时按Ctrl-C,默认录制时间和最长录制时间都是 180 秒。

如果需要导出到电脑:

adb pull /sdcard/filename.mp4复制代码

可以使用adb shell screenrecord --help查看screenrecord命令的帮助信息,下面是常见参数及含义:

4.11.3 查看连接过的 WiFi 密码

注:需要 root 权限。

adb shellsucat /data/misc/wifi/*.conf复制代码

4.11.4 设置系统日期和时间

注:需要 root 权限。

adb shellsudate -s 0823.131500复制代码

表示将系统日期和时间更改为 年 08 月 23 日 13 点 15 分 00 秒。

4.11.5 重启手机

adb reboot复制代码

4.11.6 检测设备是否已 root

adb shellsu复制代码

此时命令行提示符是$则表示没有 root 权限,是#则表示已 root。

4.11.7 使用 Monkey 进行压力测试

Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。

简单用法:

adb shell monkey -p <packagename> -v 500复制代码

表示向<packagename>指定的应用程序发送 500 个伪随机事件。 Monkey 的详细用法参考 官方文档。

4.11.8 开启/关闭 WiFi

注:需要 root 权限。

开启 WiFi:

adb rootadb shell svc wifi enable复制代码

关闭 WiFi:

adb rootadb shell svc wifi disable复制代码

若执行成功,输出为空;若未取得 root 权限执行此命令,将执行失败,输出Killed

4.12 刷机相关命令

4.12.1 重启到 Recovery 模式

adb reboot recovery复制代码

4.12.2 从 Recovery 重启到 Android

adb reboot复制代码

4.12.2 重启到 Fastboot 模式

adb reboot bootloader复制代码

4.12.4 通过 sideload 更新系统

如果我们下载了 Android 设备对应的系统更新包到电脑上,那么也可以通过 adb 来完成更新。

以 Recovery 模式下更新为例:

重启到 Recovery 模式。

adb reboot recovery复制代码

在设备的 Recovery 界面上操作进入Apply update-Apply from ADB。 注:不同的 Recovery 菜单可能与此有差异,有的是一级菜单就有Apply update from ADB

通过 adb 上传和更新系统。

adb sideload <path-to-update.zip>复制代码

4.13 安全相关命令

4.13.1 启用/禁用 SELinux

启用 SELinux

adb rootadb shell setenforce 1复制代码

禁用 SELinux

adb rootadb shell setenforce 0复制代码

4.13.2 启用/禁用 dm_verity

启用 dm_verity

adb rootadb enable-verity复制代码

禁用 dm_verity

adb rootadb disable-verity复制代码

4.14 更多 adb shell 命令

Android 系统是基于 Linux 内核的,所以 Linux 里的很多命令在 Android 里也有相同或类似的实现,在adb shell里可以调用。本文档前面的部分内容已经用到了adb shell命令。

4.14.1 查看进程状态

adb shell ps复制代码

输出信息各列含义:

4.14.2 查看处理器实时状态

adb shell top [-m max_procs] [-n iterations] [-d delay] [-s sort_column] [-t] [-h]复制代码

adb shell top后面可以跟一些可选参数进行过滤查看不同的列表,可用参数及含义如下:

输出信息各列含义:

4.14.3 查看进程 UID

有两种方案:

adb shell dumpsys package <packagename> | grep userId=如:

adb shell dumpsys package org.mazhuang.guanggoo | grep userId=userId=10394复制代码

通过 ps 命令找到对应进程的 pid 之后adb shell cat /proc/<pid>/status | grep Uid如:

adb shellgemini:/ $ ps | grep org.mazhuang.guanggoou0_a394 28635 770 1795812 78736 SyS_epoll_ 0000000000 S org.mazhuang.guanggoogemini:/ $ cat /proc/28635/status | grep UidUid: 10394 10394 10394 10394gemini:/ $复制代码

五、致谢

ADB ShellAwesome AdbAndroid Debug Bridge

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。