adb 是什么?
Android Debug Bridge (adb
) 即 安卓调试桥, 是一种功能多样的命令行工具,可让您与设备进行通信。adb
命令可用于执行各种设备操作,例如安装和调试应用。
adb 的安装
获取 adb 有以下 2 种方式:
安装了 Android Studio 以后,通过 SDK Manager 进行安装;
直接下载 Android SDK Platform Tools;解压缩后获得
adb.exe
程序
本质上,两种方式都是下载 adb.exe
到本机;
为了使用方便,建议配置环境变量,免去进入到 adb 文件夹下的麻烦;
“识别不到设备” 解决方案
在安装了 adb 的情况下,使用 USB 数据线连接到 PC,PC 却没有识别到设备,一般情况是因为驱动程序的问题;
这时候需要手动安装驱动程序:
获取 Google USB 驱动程序;下载独立驱动程序的 zip 压缩包
驱动安装完成后,再次插拔 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 浏览器;
截屏操作
对当前的屏幕进行截屏操作;
需要注意的是,以下几种情况无法进行截屏:
window 设置为安全模式,则无法进行截屏
使用命令:
adb shell screencap -p /sdcard/Download/test.png
截取 png 格式的图片,保存到指定的文件夹下,并命名为 test.png
录屏操作
::: tip 提示 录屏还可以使用 scrcpy 程序完成; :::
对当前的屏幕进行屏幕录制的操作;
需要注意的是,以下几种情况无法进行录屏:
window 设置为安全模式,则无法进行截屏
使用命令:
adb shell screenrecord /sdcard/Download/demo.mp4
录制为 mp4 格式的视频,保存到指定的目录下:
可以额外添加的参数:
--time-limit
, 整数代表秒,例如:10
;默认值为 180 秒;--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
。