Android 调试桥 (adb)

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连 //貌似连不了

  1. 在您的工作站上,更新到最新版本的 SDK 平台工具

  2. 在设备上启用开发者选项

  3. 启用无线调试选项。

  4. 在询问要允许在此网络上进行无线调试吗?的对话框中,点击允许

  5. 选择使用配对码配对设备。记下设备上显示的配对码、IP 地址和端口号。

  6. 在工作站上,打开一个终端并导航到 android_sdk/platform-tools

  7. 运行 adb pair ipaddr:port。 使用第 5 步中的 IP 地址和端口号。

  8. 当系统提示时,输入您在第 5 步中获得的配对码。系统会显示一条消息,表明您的设备已成功配对。

        none
      Enter pairing code: 482924
      Successfully paired to 192.168.1.130:37099 [guid=adb-235XY]
       
  9. (仅适用于 Linux 或 Microsoft Windows)运行 adb connect ipaddr:port。使用无线调试下的 IP 地址和端口

 

WLAN (Android 10及以下)//貌似连不了

  1. 将 Android 设备和 adb 主机连接到这两者都可以访问的同一 WLAN 网络。请注意,并非所有接入点都适用;您可能需要使用防火墙已正确配置为支持 adb 的接入点

  2. 如果您要连接到 Wear OS 设备,请关闭手机上与该设备配对的蓝牙。

  3. 使用 USB 线将设备连接到主机。

  4. 设置目标设备以监听端口 5555 上的 TCP/IP 连接。

    adb tcpip 5555
  5. 拔掉连接目标设备的 USB 线。

  6. 找到 Android 设备的 IP 地址。例如,对于 Nexus 设备,您可以在设置 > 关于平板电脑(或关于手机)> 状态 > IP 地址下找到 IP 地址。或者,对于 Wear OS 设备,您可以在设置 > WLAN 设置 > 高级 > IP 地址下找到 IP 地址。

  7. 通过 IP 地址连接到设备。

    adb connect device_ip_address
  8. 确认主机已连接到目标设备:

    $ adb devices
    List of devices attached
    device_ip_address:5555 device

如果 adb 连接断开:

  1. 确保主机仍与 Android 设备连接到同一个 WLAN 网络。

  2. 通过再次执行 adb connect 步骤重新连接。

  3. 如果上述操作未解决问题,重置 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-avdsemulator 命令位于 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) 命令相同。这项变更解决了很多命令注入方面的问题,还使安全执行包含 shell 元字符的命令(如 adb install Let\'sGo.apk)成为可能。不过,这项变更还意味着,对包含 shell 元字符的所有命令的解释也发生了变化。例如,adb shell setprop foo 'a b' 命令现在会返回错误,因为单引号 (') 会被本地 shell 消去,设备看到的是 adb shell setprop foo a b。如需使该命令正常运行,请引用两次,一次用于本地 shell,另一次用于远程 shell,与处理 ssh(1) 的方法相同。例如,adb shell setprop foo "'a b'"

Android 提供了大多数常见的 Unix 命令行工具。如需查看可用工具的列表,请使用以下命令:

adb shell ls /system/bin

对于大多数命令,都可通过 --help 参数获得命令帮助。许多 shell 命令都由 toybox 提供。对于所有 toybox 命令,都可通过 toybox --help 可获得命令的常规帮助。

 

调用 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 命令的默认设置,您可以使用 ActivityManager.isRunningInUserTestHarness()

 

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就行了

 

posted @ 2021-05-27 17:37  Write儿  阅读(412)  评论(0)    收藏  举报