Android 调试桥 (adb)
-
-
客户端-服务端程序 c/s
-
客户端:发送命令(PC)
-
守护程序:设备上的进程
-
服务器:开发机器上作为后台进程运行
-
-
当您启动某个 adb 客户端时,该客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 - 所有 adb 客户端均通过端口 5037 与 adb 服务器通信。(先检查,有就用,没有就启动,端口5037 TCP)
-
在5555-5585中寻找端口
-
按对出现
-
模拟器adb奇数eg:5555
-
控制台偶数:5554
-
用USB连接
-
开调试
-
关于手机,连点7次(4.2up)
-
android_sdk/platform-tools/ 目录执行 adb devices
Wifi连 //貌似连不了
-
在您的工作站上,更新到最新版本的
-
在设备上启用
-
启用无线调试选项。
-
在询问要允许在此网络上进行无线调试吗?的对话框中,点击允许。
-
选择使用配对码配对设备。记下设备上显示的配对码、IP 地址和端口号。
-
在工作站上,打开一个终端并导航到
android_sdk/platform-tools。 -
运行
adb pair ipaddr:port。 使用第 5 步中的 IP 地址和端口号。 -
当系统提示时,输入您在第 5 步中获得的配对码。系统会显示一条消息,表明您的设备已成功配对。
none
Enter pairing code: 482924
Successfully paired to 192.168.1.130:37099 [guid=adb-235XY]
-
(仅适用于 Linux 或 Microsoft Windows)运行
adb connect ipaddr:port。使用无线调试下的 IP 地址和端口
WLAN (Android 10及以下)//貌似连不了
-
将 Android 设备和 adb 主机连接到这两者都可以访问的同一 WLAN 网络。请注意,并非所有接入点都适用;您可能需要使用防火墙已正确配置为支持 adb 的接入点。
-
如果您要连接到 Wear OS 设备,请关闭手机上与该设备配对的蓝牙。
-
使用 USB 线将设备连接到主机。
-
设置目标设备以监听端口 5555 上的 TCP/IP 连接。
adb tcpip 5555 -
拔掉连接目标设备的 USB 线。
-
找到 Android 设备的 IP 地址。例如,对于 Nexus 设备,您可以在设置 > 关于平板电脑(或关于手机)> 状态 > IP 地址下找到 IP 地址。或者,对于 Wear OS 设备,您可以在设置 > WLAN 设置 > 高级 > IP 地址下找到 IP 地址。
-
通过 IP 地址连接到设备。
adb connect device_ip_address -
确认主机已连接到目标设备:
$ adb devices
List of devices attached
device_ip_address:5555 device
如果 adb 连接断开:
-
确保主机仍与 Android 设备连接到同一个 WLAN 网络。
-
通过再次执行
adb connect步骤重新连接。 -
如果上述操作未解决问题,重置 adb 主机:
adb kill-server
查看连接设备的命令 adb devices -l
会返回 序列号,状态(offline,device,no device)
如果您包含 -l 选项,devices 命令会告知您设备是什么。当您连接了多个设备时,此信息很有用,可帮助您将它们区分开来。
$ adb devices
List of devices attached
emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64
emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86
0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
有可能模拟器会不显示
可能的情况:
1.adb服务器未启动
2.emulator -port 或者 -ports的值为5554-5584的奇数
3.端口空闲,可以建立连接,端口忙碌,模拟器另选端口了
4.先启动了模拟器,后启动了adb
解决方案:
1、重启服务器
对于 avd 名称,请提供系统中有效的 avd 名称。如需获取 avd 名称列表,请输入 emulator -list-avds。 emulator 命令位于 android_sdk/tools 目录下。(avd:Android Virtual Device)
$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5555
$ adb devices
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
2、先启动了adb的情况
-
先关服务器 adb kill -server
-
然后用 emulator -avd XXXXXXX -port XXXX
-
然后再启动 abd start-server
-
最后查看adb devices
多个设备连接的情况
先获取序列号 adb devices -l
然后发送命令时要结合-s 序列号
$ adb devices
List of devices attached
emulator-5554 device
emulator-5555 device
$ adb -s emulator-5555 install helloWorld.apk
如果多个设备,但是没指定目的设备,就会出错
只连了一个avd 可以用 -e 只连了一个实体设备 -d
安装命令:adb install (安装测试apk要使用-t)
-
-t:允许安装测试 APK。仅当您运行或调试了应用或者使用了 Android Studio 的 Build > Build APK 命令时,Gradle 才会生成测试 APK。如果是使用开发者预览版 SDK(如果targetSdkVersion是字母,而非数字)构建的 APK,那么安装测试 APK 时必须在install命令中包含 -t。
arm架构不能安装x86
端口转发:forward
adb forward tcp:6100 tcp:7100
复制文件:
pull:拉 ,从设备拉到本地
push:推,从本地推文件到设备
adb pull remote local
adb push local remote
local和remote时本地和设备的路径 eg:
adb push foo.txt /sdcard/foo.txt
关闭adb:adb kill-server
发adb命令:可以命令行发,可以脚本发
adb [-d | -e | -s serial_number] command
adb --help查看adb的命令列表
shell命令:
单个:
adb [-d |-e | -s serial_number] shell shell_command
交互式的:
adb [-d | -e | -s serial_number] shell
退出shell:ctrl+d 或者 exit
注意:在 Android 平台工具 23 及更高版本中,adb 处理参数的方式与 ssh(1) 命令相同。这项变更解决了很多
Android 提供了大多数常见的 Unix 命令行工具。如需查看可用工具的列表,请使用以下命令:
adb shell ls /system/bin
对于大多数命令,都可通过 --help 参数获得命令帮助。许多 shell 命令都由
调用 Activity 管理器 (am)
在 adb shell 中,您可以使用 Activity 管理器 (am) 工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、广播 intent、修改设备屏幕属性,等等。在 shell 中,相应的语法为:
am command
am start -n <包名>/<activity>
am start -n com.android.browser/com.android.browser.BrowserActivity
am broadcast 启动广播 adb shell am broadcast -a com.noahedu.noahdict.screenshots.recognition --ei type 5
am start 启动Activity adb shell am start -a com.noahedu.noahdict.screenshots.recognition --ei type 5
上面的命令对应的代码就是 Intent intent = new Intent("com.noahedu.noahdict.screenshots.recognition"); intent.putExtra("type", 5); startActivity(intent);
-a action;activity对应的action; --es key stringValue; 传递 String 参数; --ez key booleanValue; 传递 Boolean 参数; --ei key intValue; 传递 int 参数; --el key longValue; 传递 long 参数; --ef key floatValue; 传递 float 参数;
另外,还可以通过包名类名启动应用
adb shell am start -n 包名/类名
调用软件包管理器 (pm)
在 adb shell 中,您可以使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包执行操作和查询。在 shell 中,相应的语法为:
pm command
pm list packages -3 //查看第三方包
调用设备政策管理器 (dpm)
为便于您开发和测试设备管理(或其他企业)应用,您可以向设备政策管理器 (dpm) 工具发出命令。使用该工具可控制活动管理应用,或更改设备上的政策状态数据。在 shell 中,语法如下:
dpm command
屏幕截图
screencap filename
adb shell screencap /sdcard/screen.png
录制视频
screenrecord 命令是一个用于录制设备(搭载 Android 4.4(API 级别 19)及更高版本)显示屏的 shell 实用程序。该实用程序将屏幕 Activity 录制为 MPEG-4 文件。您可以使用此文件创建宣传视频或培训视频,或将其用于调试或测试。
在 shell 中,使用以下语法:
screenrecord [options] filename
注:ctrl+c可停止录制或者到三分钟,或者设置 --time-limit设置时间限制就会停
可以先录制,然后将录的文件拉到本地
$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4
录制命令:
adb shell screenrecord --size 1920x480 /storage/sdcard0/demorecord.mp4
时间设置:
adb shell screenrecord --time-limit 100 /storage/sdcard0/demorecord.mp4
注:
-
音频和视频无法同时录制
-
不能再wear os上录制
-
有些设备的无法以他显示的分辨率录制,可以用低分辨率录制
-
不能旋转屏幕
-
--helo可以看选项
读取应用的 ART 配置文件
从 Android 7.0(API 级别 24)开始,Android Runtime (ART) 会收集已安装应用的执行配置文件,这些配置文件用于优化应用性能。您可能需要检查收集的配置文件,以了解在应用启动期间,系统频繁执行了哪些方法和使用了哪些类。
要生成文本格式的配置文件信息,请使用以下命令:
adb shell cmd package dump-profiles package
要检索生成的文件,请使用:
adb pull /data/misc/profman/package.txt
重置测试设备
如果您在多个测试设备上测试应用,则在两次测试之间重置设备可能很有用,例如,可以移除用户数据并重置测试环境。您可以使用 testharness adb shell 命令对搭载 Android 10(API 级别 29)或更高版本的测试设备执行恢复出厂设置,如下所示。
adb shell cmd testharness enable
使用 testharness 恢复设备时,设备会自动将允许通过当前工作站调试设备的 RSA 密钥备份在一个持久性位置。也就是说,在重置设备后,工作站可以继续调试设备并向设备发出 adb 命令,而无需手动注册新密钥。
此外,为了帮助您更轻松且更安全地继续测试您的应用,使用 testharness 恢复设备还会更改以下设备设置:
-
设备会设置某些系统设置,以便不会出现初始设备设置向导。也就是说,设备会进入一种状态,供您快速安装、调试和测试您的应用。
-
设置:
-
停用锁定屏幕
-
停用紧急提醒
-
停用帐户自动同步
-
停用自动系统更新
-
-
其他:
-
停用预装的安全应用
-
如果您的应用需要检测并适应 testharness 命令的默认设置,您可以使用
sqlite
sqlite3 可启动用于检查 sqlite 数据库的 sqlite 命令行程序。它包含用于输出表格内容的 .dump 以及用于输出现有表格的 SQL CREATE 语句的 .schema 等命令。您也可以从命令行执行 SQLite 命令,如下所示。
$ adb -s emulator-5554 shell
$ sqlite3 /data/data/com.example.app/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions
有时Android的Terminal会不识别adb命令;
source .bash_profile就行了


浙公网安备 33010602011771号