美文网首页
Android开发-adb命令

Android开发-adb命令

作者: 珩珩保镖 | 来源:发表于2024-12-19 17:39 被阅读0次

[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

amadb 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 #替换设备显示密度

pmadb 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

相关文章

网友评论

      本文标题:Android开发-adb命令

      本文链接:https://www.haomeiwen.com/subject/mtpxejtx.html