3

我有一个 VSTS/Azure DevOps 自托管代理作为服务运行在一台机器上,该机器通过 USB 连接了一个我想与 ADB 一起使用的 Android 设备。

在构建期间,命令行任务调用 ADB 命令。当有人登录机器时,我遇到了设备未经授权的问题。我观察到的情况是

  • 在没有人登录机器的情况下,我插入 Android 设备并得到提示以允许 USB 调试并选中始终允许框并单击确定
  • 构建运行正常,ADB 命令正常工作
  • 一段时间后,有人登录机器,设备对他们来说是未经授权的
  • 在发送 ADB 命令的下一次构建期间,我再次使用不同的 RSA 密钥指纹得到提示

这似乎类似于每次启动新构建时的 RSA 指纹更改,但他们的问题是针对 docker/gitlab-ci。

4

1 回答 1

1

要解决这个问题,您需要创建一个系统范围的 ADB 密钥并告诉 ADB 它在哪里使用 ADB_VENDOR_KEYS 环境变量。

ADB_VENDOR_KEYS 被描述为以冒号分隔的键(文件或目录)列表。您应该可以将其设置为目录,但当时我只能让它与文件一起使用。由于 ADB 在服务中运行,因此将其设置为系统环境变量而不是用户环境变量非常重要。

设置步骤是

  • adb start-server通过运行或创建一个 adbkey adb devices。它们的密钥将位于C:\Users\<yourname>\.android. 如果您已经在运行 adb(可能是这种情况),则 adb 服务器已经启动并且已经创建了一个密钥。
  • 创建一个文件夹,例如C:\adb_keys并将密钥复制到此文件夹
  • 添加一个名为 ADB_VENDOR_KEYS 的系统环境变量,其值为 C:\adb_keys\adbkey或之前步骤中放置密钥的位置。
  • 授权 USB 调试连接。下面的步骤可能有点矫枉过正,但应该确保没有遇到障碍。
    • 关闭并重新打开命令提示符(或重新启动计算机)才能使用新的环境变量
    • 拔下设备
    • 杀死 ADB 服务器。adb kill-server
    • 撤销设备上的 USB 调试授权。设置 > 开发人员选项 > 撤销 USB 调试授权。
    • 在设备上禁用和重新启用 USB 调试
    • 插入设备
    • 启动亚行服务器。adb start-server或者adb devices
    • 接受“允许 USB 调试?” 选中“始终允许来自此计算机”复选框

重新启动计算机并排队使用 ADB 的新构建,一切都应该工作。

于 2018-09-19T20:40:55.407 回答