Android Azure DevOps(vsts)自托管代理上的ADB RSA密钥指纹更改

Android Azure DevOps(vsts)自托管代理上的ADB RSA密钥指纹更改,android,azure-devops,azure-devops-self-hosted-agent,Android,Azure Devops,Azure Devops Self Hosted Agent,我有一个VSTS/Azure DevOps自托管代理作为服务运行在一台通过USB连接了Android设备的机器上,我想与ADB一起使用 在构建过程中,命令行任务调用ADB命令。我遇到一个问题,当有人登录到机器时,设备未经授权。我观察到的情况是 在没有人登录机器的情况下,我插入Android设备,得到允许USB调试的提示,选中always allow(总是允许)框,然后单击OK(确定) 生成正确运行,ADB命令正常工作 过了一段时间,有人登录到这台机器,而这台设备对他们来说是未经授权的 在下一次

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

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

  • 在没有人登录机器的情况下,我插入Android设备,得到允许USB调试的提示,选中always allow(总是允许)框,然后单击OK(确定)
  • 生成正确运行,ADB命令正常工作
  • 过了一段时间,有人登录到这台机器,而这台设备对他们来说是未经授权的
  • 在下一次生成过程中,当发送ADB命令时,我再次收到带有不同RSA密钥指纹的提示

这似乎与类似,但他们的问题是docker/gitlab ci。

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

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

设置步骤如下:

  • 通过运行
    adb启动服务器
    adb设备
    创建adbkey。它们将是关键 位于
    C:\Users\\.android
    。如果您已经在运行adb(可能是这种情况),那么adb服务器将已经启动,并且已经创建了一个密钥
  • 创建一个文件夹,例如
    C:\adb\u keys
    ,并将密钥复制到此文件夹
  • 添加一个名为ADB_VENDOR_KEYS的系统环境变量,其值为
    C:\adb\U keys\adbkey
    或上一步中钥匙放置的位置
  • 授权USB调试连接。下面的步骤可能有些过分,但应确保不会遇到障碍。
    • 关闭并重新打开命令提示符(或重新启动计算机),以便能够使用新的环境变量
    • 拔下设备的插头
    • 杀死ADB服务器<代码>adb终止服务器
    • 撤消设备上的USB调试授权。设置>开发人员选项>撤销USB调试授权
    • 禁用并重新启用设备上的USB调试
    • 插入设备
    • 启动ADB服务器<代码>adb启动服务器或
      adb设备
    • 接受“允许USB调试?”并选中“始终允许从此计算机进行调试”复选框

重新启动计算机并将使用ADB的新生成排队,一切都应该正常。

虽然您的特定虚拟化平台可能不同(与您链接的问题中的平台不同),但问题的根本原因(非持久性用户主目录)仍然相同。默认情况下,ADB主机密钥特定于用户。在您的设置中,您可能需要使用计算机特定的密钥。这应该可以通过。我似乎能够通过设置ADB_VENDOR_KEYS系统环境变量使其工作,但仅当将其设置为文件而不是文件夹时。例如,
c:\adb\u keys\adbkey
起作用,而不是
c:\adb\u keys
起作用,其中
adbkey
是键。我假设ADB_KEYS_PATH也可以工作,但运行ADB会显示一个环境变量列表,表明我们应该使用ADB_VENDOR_KEYS。不过有趣的是,当没有人登录且未设置此环境变量时,我可以启用调试。我想系统上的某个地方放了一个adbkey,但我找不到它。