Administrator
发布于 2024-04-19 / 2 阅读
0
0

adb 不完全使用指南

adb 是什么?

Android Debug Bridge (adb) 即 安卓调试桥, 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作,例如安装和调试应用。

adb 的安装

获取 adb 有以下 2 种方式:

  1. 安装了 Android Studio 以后,通过 SDK Manager 进行安装;

  2. 直接下载 Android SDK Platform Tools;解压缩后获得 adb.exe 程序

本质上,两种方式都是下载 adb.exe 到本机;

为了使用方便,建议配置环境变量,免去进入到 adb 文件夹下的麻烦;

“识别不到设备” 解决方案

在安装了 adb 的情况下,使用 USB 数据线连接到 PC,PC 却没有识别到设备,一般情况是因为驱动程序的问题;

这时候需要手动安装驱动程序:

  1. 获取 Google USB 驱动程序;下载独立驱动程序的 zip 压缩包

  2. 安装 USB 驱动程序

驱动安装完成后,再次插拔 USB 数据线,再尝试使用 adb 连接到 Android 设备。

停止 adb 服务器

在某些情况下,可能需要终止 adb 服务器进程,然后重启才能解决问题。

例如,如果 adb 不响应命令,就可能会发生这种情况。

如需停止 adb 服务器,请使用 adb kill-server 命令。然后,就可以通过发出其他任何 adb 命令来重启服务器。

连接设备和查看连接的设备

使用 USB 连接 Android 设备,一般情况下,不需要使用命令以显式地连接;连接到远程的 Android 设备可以使用以下的命令:

adb connect devices.ip:port

上面的 IP 和 端口,需要根据实际情况进行替换;

列出已经连接的 Android 设备

adb devices -l

文件传输

::: tip 提示 不同系统下的文件路径符号不同,请根据 PC 的系统进行修改; :::

从 Android 拉取文件 到PC

拉取指定的文件,到 PC 的文件夹下

adb pull /sdcard/Download/test.png D:\Files\

拉取整个文件夹到,到 PC 的文件夹下:

adb pull /sdcard/Download/ D:\Files\

上述命令,会将 Download 文件夹,整个拷贝到 Files 文件夹下;

PC 推送文件到 Android 设备

将 PC 上的指定文件,推送到 Android 的指定文件下:

adb push D:\Files\test.png /sdcard/Download/

操作应用程序

获取当前应用的包名

首先,让一个应用程序保持在前台运行;使用下面的命令来获取当前运行的 app 的包名和 activity 名:

adb shell dumpsys activity activities | findstr Hist

| 号后面的是使用本机的文本处理程序进行搜索;如果是 Windows 可以使用 findstr,如果是 Linux 可以使用 grep

例如,打开 chrome 浏览器,返回的信息如下:

* Hist #0: ActivityRecord{db3b458 u0 com.android.chrome/com.google.android.apps.chrome.Main t842}
          keysPaused=false inHistory=true mIsCastMode=false mIsLastFrame=false setToSleep=false idle=true mStartingWindowState=STARTING_WINDOW_SHOWN
      * Hist #0: ActivityRecord{3a8b1aa u0 com.miui.home/.launcher.Launcher t2}
          keysPaused=false inHistory=true mIsCastMode=false mIsLastFrame=false setToSleep=false idle=true mStartingWindowState=STARTING_WINDOW_NOT_SHOWN
      * Hist #0: ActivityRecord{d9f8136 u0 com.android.settings/.Settings$WifiSettingsActivity t709 f}}
          keysPaused=false inHistory=true mIsCastMode=false mIsLastFrame=false setToSleep=false idle=true mStartingWindowState=STARTING_WINDOW_REMOVED
      * Hist #0: ActivityRecord{567332d u0 com.android.settings/.Settings$WifiSettingsActivity t484 f}}
          keysPaused=false inHistory=true mIsCastMode=false mIsLastFrame=false setToSleep=false idle=true mStartingWindowState=STARTING_WINDOW_REMOVED
      * Hist #0: ActivityRecord{1374941 u0 com.android.browser/.BrowserActivity t841}
          keysPaused=false inHistory=true mIsCastMode=false mIsLastFrame=false setToSleep=false idle=true mStartingWindowState=STARTING_WINDOW_REMOVED
        History of long time messages on Looper (android.ui, tid=1912):

另外一种方式是,列出全部的 app 信息,然后去查找包名:

adb shell pm list packages | findstr qq

这样就可以查找出 qq 的完整包名了;

提取应用的 apk 文件

在提取应用的 apk 安装包前,需要获取应用的包名;获取到包名后,才能获取 apk 文件的位置,使用下面的命令:

adb shell pm list the.name.of.app 

拿到 apk 文件的存储位置后,再使用 adb pull 拉取到 PC 上即可;

安装和卸载应用程序

::: tip 提示 部分系统,可以使用这个命令,删除掉系统自带的应用程序。 :::

安装单个的应用:

adb install the_app_U_want_to_install.apk

安装多个应用:

adb install-multiple the_app_U_want_to_install.apk another_app_U_want_to_install.apk

卸载应用,需要提前获取应用的包名:

adb uninstall the.package.name.of.app

停止和启动应用程序

停止应用程序

有 2 种方式停止一个应用程序:

adb shell am force-stop the.packname.of.app

下面的这种方式,会更加优雅一些:

adb shell am force-stop --user current the.packname.of.app

启动应用程序

如果要启动 app,需要先获取 app 的包名和主 activity,然后使用下面的命令进行操作:

adb shell am start -n com.android.chrome/com.google.android.apps.chrome.Main

例如,上面的命令,就会启动 chrome 浏览器;

截屏操作

对当前的屏幕进行截屏操作;

需要注意的是,以下几种情况无法进行截屏:

  1. window 设置为安全模式,则无法进行截屏

使用命令:

adb shell screencap -p /sdcard/Download/test.png

截取 png 格式的图片,保存到指定的文件夹下,并命名为 test.png

录屏操作

::: tip 提示 录屏还可以使用 scrcpy 程序完成; :::

对当前的屏幕进行屏幕录制的操作;

需要注意的是,以下几种情况无法进行录屏:

  1. window 设置为安全模式,则无法进行截屏

使用命令:

adb shell screenrecord /sdcard/Download/demo.mp4

录制为 mp4 格式的视频,保存到指定的目录下:

可以额外添加的参数:

  1. --time-limit, 整数代表秒,例如:10;默认值为 180 秒;

  2. --size widthxheight,指定宽高;默认值为屏幕分辨率;一般不需要修改;部分设备可能需要手动指定

例如,录制一段 10 秒的视频:

adb shell screenrecord --time-limit 10 /sdcard/Download/demo.mp4

模拟用户的 "I/O" 操作

模拟点击操作

点击坐标 (500, 1000)

adb shell input tap 512 1024

模拟滑动操作

adb shell input swipe 256 256 512 512

(256, 256) 滑动到 (512, 512)

模拟长按的操作

adb 未提供这样的 api,但是可以曲线救国:滑动操作的起点和终点保持一致,在一定的时间内完成,来模拟长按的操作;

adb shell input swipe 256 512 256 512 300

长按坐标 (256, 512),时长 300 毫秒。

模拟用户的输入文本的操作

需要首先定位到 EditText 上;

adb shell input text 'string'

向 EditText 上输入 string


评论