[TOC]
Android开发-adb命令
目录
Android开发-adb命令
一、什么是adb
1.官方文档
2.初步了解
二、下载和使用
1.下载
2.使用
三、常用指令
1.tcpip指令 (非开发人员常用)
2.常用指令(非开发人员常用)
3.开发人员常用指令
4.adb结合win批处理编写简单的脚本
一、什么是adb
1.官方文档
对于专业技术人员可以直接查看文档; adb的官方文件地址 https://developer.android.google.cn/tools/adb?hl=zh-cn 里面详细介绍了adb和怎么使用;
2.初步了解
普通使用者可以查看下面总结:
Android Debug Bridge (ADB) 是一个通用命令行工具,它允许您与连接到计算机的 Android 设备进行通信。
- 设备管理:列出所有已连接的设备或模拟器。
- 应用部署:将 APK 文件直接推送到设备上并安装。
-
日志查看:使用
adb logcat命令实时查看设备上的系统和应用日志。 - 文件传输:在主机和设备之间推送和拉取文件。
- Shell 访问:获得对设备的 shell 访问权限,可以运行 Linux 命令来管理文件系统或查询设备信息。
- 端口转发:创建网络连接,使本地端口与远程设备上的端口相连接。
- 截屏和录屏:捕捉屏幕快照或录制视频。
- 输入模拟:模拟用户输入,如触摸事件或按键。
- 性能分析:监控 CPU 使用情况、内存使用、网络流量等。
二、下载和使用
adb在Android SDK 平台工具软件包中; 如果是开发人员在安装sdk的时候通常已经安装过了路径在 android_sdk/platform-tools/;如果是普通使用者则没必要下载sdk直接下载Android SDK 平台工具软包; 下载后将对应的platform-tools文件夹路径添加到环境变量中即可:
1.下载
官方下载地址:
https://developer.android.google.cn/tools/releases/platform-tools?hl=zh-cn
国内部分网友备份的下载地址:
https://gitee.com/awake558/platform-tools
https://gitee.com/David-EmDevTools/Android-SDK-platform-tools
2.使用
下载的压缩包直接加压; 然后接吧platform-tools的文件夹路径加入到环境变量中即可
比如我下载后解压到 C:\Program Files\platform-tools文件夹
配置环境变量.png
配置好后如果想验证有没有设置好 可以通过按 "Win+R"键唤出 "运行"窗口; 在运行窗口输入cmd, 调出命令窗口;在窗口中输入adb --version; 如果显示出当前版本即说明设置成功;
adb 查看.png
三、常用指令
对于开发人员可以查看官方文档 https://developer.android.google.cn/tools/adb?hl=zh-cn#devicestatus
1.tcpip指令 (非开发人员常用)
对于非开发人员最常见的是, 连接网络,然后打开tcpip的网络调试,告诉开发人员对应ip; 让开发自己处理. 步骤如下:
1.设备连接上网络
2.通过adb tcpip 5555指令打开设备的adb调试;
3.然后去设置里面查看ip地址让开发人员连接设备 (也可以通过adb shell 和 ifconfig指令查看 ip )
adb tcpip.png
adb shell 和 ifconfig可以一起用即: adb shell ifconfig
2.常用指令(非开发人员常用)
日志抓取 通过adb logcat >filePath 比如我希望日志文件存在D:\mytest文件夹下,文件名叫test.log指令如下
#D:\mylog\test.log 为自行定义的文件路径
adb logcat >D:\mytest\test.log
从设备复制文件 通过adb pull 把Android设备里面某路径文件夹拷贝到Windows电脑上; 比如 adb pull 设备路径 电脑路径
#adb pull
adb pull /data/user_de/0/com.mytest.app/cache/databases D:\mytest\databases\
文件复制到设备 通过adb push把Windows电脑上文件拷贝到 Android设备里面; 比如 adb push 电脑路径 设备路径
adb push D:\mytest\databases\. /data/user_de/0/mytest.app/databases
截取屏幕截图 通过 adb shell screencap截图 并把截图文件命名为screen.png; 通常我们截图后需要再adb pull 复制出来
#执行截图
adb shell screencap /sdcard/screen.png
#把截图文件拷贝到电脑 D:\mytest\screen.png
adb pull /sdcard/screen.png D:\mytest\screen.png
**录制视频 ** 通过 adb shell screenrecord录屏 并把录屏文件命名为demo.mp4; 通常我们录屏后需要再adb pull 复制出来
adb shell screenrecord /sdcard/demo.mp4
adb pull /sdcard/demo.mp4 D:\mytes\demo.mp4
安装应用 adb install path_to_apk安装应用;有时候如果apk为测试版本或第版本可能需要-t 或-d
adb install D:\mytes\mytest.apk
#安装低版本或debug版本等可能需要-d或 -t
adb install -r -t -d D:\mytes\mytest.apk
3.开发人员常用指令
对于开发人员而言常用指令 在官方文档 https://developer.android.google.cn/tools/adb?hl=zh-cn#devicestatus 中有详细说明
常用指令
#查看受支持 adb 命令的详细列表
adb --help
#查看当前连接的 Android设备
adb devices
# 打开tcpip网络调试
adb tcpip 5555
#查看当前连接设备ip
adb shell ifconfig
#连接某ip地址的设备 adb connect device_ip_address:5555
adb connect 192.168.100.57:5555
#重置您的 adb 主机(杀死当前电脑的adb服务)
adb kill-server
#安装应用 adb install path_to_apk
adb install D:\mytes\mytest.apk
#安装低版本或debug版本等可能需要-d或 -t
adb install -r -t -d D:\mytes\mytest.apk
#卸载com.example.MyApp应用
adb shell pm uninstall com.example.MyApp
#将 local 和 remote 替换为开发机器(本地)和设备(远程)上的目标文件/目录的路径
adb pull remote local
adb push local remote
adb push myfile.txt /sdcard/myfile.txt
#抓日志 D:\mylog\test.log 为自行定义的文件路径
adb logcat >D:\mytest\test.log
#此外 其他相关的指令
adb root #获取root权限
adb reboot #重启设备
输入模拟 adb提供了多种方式来模拟用户输入,这对于测试和调试应用程序非常有用。通过这些命令,您可以在没有物理接触设备的情况下发送触摸、按键和其他类型的输入事件到 Android 设备或模拟器
adb shell input text "Hello World"
#adb shell input keyevent KEYCODE_ENTER 模拟按键
adb shell input keyevent 26 #电源
adb shell input keyevent 8 #返回
adb shell input keyevent 3 #为Home键
adb shell input keyevent 61 #tab切换
adb shell input keyevent --longpress 142 #长按f11
#触摸事件: 点击: 在屏幕上的 (x, y) 位置执行一次点击操作。
adb shell input tap <x> <y>
#触摸事件 滑动: 从点 (x1, y1) 滑动到点 (x2, y2),可选参数 duration 定义了滑动持续的时间,默认为300毫秒。
adb shell input swipe <x1> <y1> <x2> <y2> [duration(ms)]
#轨迹球事件: 模拟轨迹球的按压和滚动事件。
adb shell input trackball press
adb shell input trackball roll <dx> <dy>
#使用 sendevent 命令 使用 sendevent 来直接发送底层的输入事件。这需要了解 Linux 输入事件格式
adb shell sendevent /dev/input/eventX type code value
#对名为 com.example.myapp 的应用执行 1000 次点击事件
adb shell monkey -p com.example.myapp -v 1000
#此外还有 使用 MonkeyRunner 或 UI Automator
#专门设计用于自动化测试的框架,如 MonkeyRunner 和 UI Automator。它们提供了编程接口,可以编写脚本来模拟一系列复杂的交互行为,适用于更复杂的测试需求。
adb shell 使用 shell 命令通过 adb 发出设备命令,也可以使用该命令启动交互式 shell
如需退出交互式 shell,请按 Control+D 或输入 exit。
Android 提供了大多数常见的 Unix 命令行工具。如需查看可用工具的列表
adb shell ls /system/bin
am 在 adb shell 中,您可以使用 activity 管理器 (am) 工具发出命令以执行各种系统操作
adb shell 中,您可以使用 activity 管理器 (am) 工具发出命令以执行各种系统操作,如启动 activity、强行停止进程、广播 intent、修改设备屏幕属性,等等
#比如 adb shell am start pkgName/className -a 某action
#比如启动系统设置页面 pkgName为com.android.setting 对应className为com.android.settings.Settings
adb shell am start com.android.settings/com.android.settings.Settings
#或
adb shell am start -n pkgName/className
#也可以通过uri其他; 其他时候可以给intent添加参数比如加 --es 为String内容 --ei为int内容
adb shell am start -d uri --es token 'bearer xxx'
#startservice [options] intent 启动由 intent 指定的 Service。
adb shell am startservice [options] intent
#强行停止某程序
adb shell am force-stop pkgName
#终止与 package 关联的所有进程
adb shell am kill [options] package
#终止所有后台进程。
adb shell am kill-all
#broadcast [options] intent 发出广播 intent。
adb shell am broadcast [options] intent
#性能分析器
profile start process file #启动 process 的性能分析器,将结果写入 file。
profile stop process #停止 process 的性能分析器。
dumpheap [options] process file #转储 process 的堆,写入 file。
clear-debug-app #清除之前使用 set-debug-app 设置的用于调试的软件包。
monitor [options] #开始监控崩溃或 ANR。
display-density dpi #替换设备显示密度
pm在 adb shell 中,您可以使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包执行操作和查询
#在 shell 中,相应的 pm 语法为:pm command
install [options] path #将软件包(通过 path 指定)安装到系统。
uninstall [options] package #从系统中移除软件包。 比如:adb shell pm uninstall com.example.MyApp
path package #输出给定 package 的 APK 的路径。
clear package #删除与软件包关联的所有数据。
#版本查看
adb shell pm dump packageName | findStr "version"
#截取屏幕截图
adb shell screencap /sdcard/screen.png
#录制视频 按 Ctrl+C 停止屏幕录制。如果不手动停止,到三分钟或 --time-limit 设置的时间限制时
adb shell screenrecord /sdcard/demo.mp4
adb shell screenrecord --help #查看可设置的录屏参数
dumpsys adb shell dumpsys 是一个非常强大的命令,它用于转储 Android 系统服务的当前状态。这个命令可以提供关于系统和应用程序内部工作方式的详细信息,对于开发者调试和优化应用性能、分析系统行为等都是非常有用的工具
#dumpsys
#查看当前activity
adb shell dumpsys activity | findstr "Activity"
#查看当前焦点在哪里
adb shell dumpsys activity | findstr "mCurrentFocus"
#其他dumpsys指令
dumpsys meminfo [package_name] #查看整个系统的内存使用情况,或者指定包名查看特定应用的内存使用详情。
dumpsys cpuinfo #显示 CPU 的使用率统计信息。
dumpsys activity activities #显示 Activity 管理器的状态,包括所有活动的任务栈和正在运行的 Activity。
dumpsys activity services #列出所有正在运行的服务(Services),以及它们的状态。
dumpsys window windows 或 dumpsys window #显示窗口管理器的状态,包括所有显示窗口的信息。这对于了解哪个窗口在最前面特别有用。
dumpsys gfxinfo [package_name] #获取图形渲染信息,如帧时间、绘制调用次数等,有助于分析应用的图形性能。
dumpsys battery #显示电池统计信息,包括充电状态、电量水平、温度等。
dumpsys power #提供电源管理服务的相关信息,例如屏幕亮度、唤醒锁状态等。
dumpsys package [package_name] #显示有关已安装的应用程序包的信息,如权限、签名、版本等。指定包名可获得更详细的单个应用信息。
dumpsys alarm #显示闹钟管理器中的所有挂起意图(Pending Intents)和计划任务。
dumpsys netstat #显示网络连接状态,包括 TCP/UDP 连接数、数据传输量等。
dumpsys connectivity #查看网络连接服务的状态,如 Wi-Fi 和移动数据连接情况。
dumpsys input_method #显示输入法管理器的状态,可用于检查当前激活的输入法和其他相关设置。
dumpsys notification#显示通知管理器的状态,包括当前显示的通知列表。
dumpsys wifi #显示 Wi-Fi 服务的状态,包括已连接的网络、扫描结果等。
dumpsys bluetooth_manager #显示蓝牙管理器的状态,包括配对设备、连接状态等。
dumpsys media.audio_flinger 和 dumpsys media.player #分别显示音频驱动程序和服务的状态,对于调试音频问题很有帮助。
getprop 系统属性 adb shell getprop 是一个非常有用的命令,它允许您查看 Android 设备的系统属性
#获取系统属性 设备型号
adb shell getprop ro.product.model
常见的 getprop 属性
1. 基本设备信息
ro.product.model: 设备型号。
ro.product.brand: 设备品牌。
ro.product.manufacturer: 制造商名称。
ro.product.device: 设备代号或内部名称。
ro.serialno: 设备序列号。
2. Android 版本和构建信息
ro.build.version.release: Android 操作系统的版本号(例如 10, 11, 12)。
ro.build.version.sdk: API 级别(例如 30 对应 Android 11)。
ro.build.type: 构建类型(user, userdebug, eng)。
ro.build.id: 构建 ID。
ro.build.fingerprint: 完整的构建指纹,通常包括制造商、型号、构建版本等信息。
ro.bootimage.build.date.utc: 引导镜像的构建日期(UTC 时间戳)。
3. 安全性和加密
ro.crypto.state: 加密状态(encrypted 或 unencrypted)。
ro.secure: 是否启用了安全模式(0 表示未启用,1 表示已启用)。
ro.debuggable: 设备是否可调试(0 表示不可调试,1 表示可调试)。
4. 网络相关信息
gsm.sim.operator.alpha: SIM 卡运营商名称。
gsm.sim.operator.numeric: SIM 卡运营商的 MCC+MNC 代码。
net.hostname: 网络主机名。
dhcp.eth0.dns1, dhcp.eth0.dns2: 分配给以太网接口的 DNS 服务器地址。
dhcp.wifi.ipaddress: 分配给 Wi-Fi 接口的 IP 地址。
dhcp.wifi.gateway: Wi-Fi 接口的网关地址。
dhcp.wifi.dns1, dhcp.wifi.dns2: 分配给 Wi-Fi 接口的 DNS 服务器地址。
5. 硬件信息
ro.hardware: 硬件平台(例如 qcom 表示高通芯片)。
ro.board.platform: 主板平台。
ro.chipname: 芯片名称。
ro.cpu.abi: CPU ABI(应用程序二进制接口),如 arm64-v8a, armeabi-v7a 等。
ro.arch: 架构类型(arm, arm64, x86 等)。
6. 电池和电源管理
ro.bootmode: 当前启动模式。
sys.powerctl: 电源控制命令(如重启、关机)。
battery.level: 电池电量百分比。
battery.status: 电池状态(充电中、充满电等)。
7. 其他常用属性
persist.sys.language: 系统语言。
persist.sys.country: 系统国家/地区。
ro.product.locale: 默认区域设置。
ro.kernel.android.checkjni: 是否启用了 JNI 检查(主要用于开发和调试)。
service.adb.root: ADB 是否以 root 权限运行(0 表示不以 root 运行,1 表示以 root 运行)。
使用 getprop 查看特定属性
#此外还有 setprop
adb shell setprop ro.product.model xxx
mount chown 命令本身并不是 ADB 独有的,而是一个常见的 Unix/Linux 系统命令,用以改变文件或目录的属主(owner)和属组(group)。在 Android 设备上通过 ADB shell 使用 chown 可以帮助开发者或高级用户修改文件权限,这对于某些调试、开发或者修复操作非常有用。
#前面 Android 提供了大多数常见的 Unix 命令行工具 ;对应工具通过 adb shell ls /system/bin 可以看到
adb shell ls /system/bin | findstr mount #比如和挂载相关等工具
#下面是删除某系统应用 比如DeskClock(系统的时钟应用程序 ,非开发人员不建议尝试)
# 获取 root 权限
adb root
# 进入设备 shell
adb shell
# 挂载分区为可写模式
mount -o remount,rw /product
# 删除文件
rm /product/app/DeskClock/DeskClock.apk
# 恢复只读模式(可选)
mount -o remount,ro /product
# 退出 shell
exit
#比如通过adb shell提供的chown工具( Unix/Linux 系统命令常见的) 可以帮助开发者或高级用户修改文件权限
adb root
adb push C:\Users\xxx\Desktop\databasesba\. /data/user_de/0/com.mytest.app/databases
cd /data/user_de/0/com.mytest.app/databases
#这样可以通过root权限吧文件push到想要的路径; 如果我希望应用获取system权限就可以访问通过chown修改访问权限
chown system:system * #或者chown -r system:system *
Unix 命令行工具很多上面只是随便举例开发者可能使用到某种情形, 希望大家多了解相关知识,方便自己工作中使用
此外也可以类似这样 执行adb shell "cd /ehome_profile; chown system:system *"
4.adb结合win批处理编写简单的脚本
由于很多adb指令是常用且固定的,我们开发人员通常可以结合win批处理编写脚本进行简单的操作.
比如前面的截图,并把图片拷贝到win电脑D盘的mytes文件夹下; 我们就可以新建一个txt的文本文件; 然后编辑文本内容;最后把这个txt的后缀名修改为.bat文件这样我们可以双击电脑上这个bat文件就会执行我们之前编辑的指令. 比如.bat内容如下:
:: 执行截图
adb shell screencap /sdcard/screen.png
:: 在D盘创建文件夹mytest
mkdir D:\mytest
:: 把截图文件拷贝到电脑 D:\mytest\screen.png
adb pull /sdcard/screen.png D:\mytest\screen.png
:: 3秒后自动关闭窗口 如果想一致停留可以使用pause
timeout 3
上面:: 表示注释行;
更多的人可能喜欢在桌面操作可以使用%USERPROFILE%\Desktop表示桌面
:: 执行截图
adb shell screencap /sdcard/screen.png
:: 在桌面创建文件夹mytest
mkdir %USERPROFILE%\Desktop\mytest
:: 把截图文件拷贝到电脑桌面 mytest文件夹下
adb pull /sdcard/screen.png %USERPROFILE%\Desktop\mytest\screen.png
:: 3秒后自动关闭窗口
timeout 3
每次双击的时候就会执行下面4条指令; 这样没事执行对应脚本文件 避免了每次都要手动输入同样的命令.
除了上面说的截图编写脚本; 我们也可以给页面跳转/ 内容输入/ 文件交互/ 权限操作等编写简单的脚本
比如内容输入
:: 输入用户名
adb shell input text "myUserName"
:: tab切换输入框
adb shell input keyevent 61
:: 输入密码
adb shell input text "myPassword"
timeout 5
比如文件操作
adb root
adb remount
:: 这个mytset.json没写绝对路径则表示相对当前.bat文件的路径,表示和当前文件桶一个文件夹下
adb push mytset.json /sdcard
timeout 3
其他的指令我就不列举了,此外win批处理指令很丰富如果想详细了解可以参考
微软官方文档 https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/active










网友评论