Изменения отпечатка ключа ADB RSA на собственном агенте Azure DevOps (vsts)

У меня есть собственный агент VSTS / Azure DevOps, работающий как служба на машине с устройством Android, подключенным через USB, который я хотел бы использовать с ADB.

Во время сборки задача командной строки вызывает команду ADB. У меня проблема, когда устройство становится неавторизованным, когда кто-то входит в систему. То, что я наблюдаю, это

  • Пока никто не вошел в систему, я подключаю устройство Android и получаю приглашение разрешить отладку по USB, устанавливаю флажок «Всегда разрешать» и нажимаю «ОК».
  • Сборки работают правильно и команды ADB работают
  • Некоторое время спустя кто-то входит в систему, и устройство становится для них неавторизованным.
  • Во время следующей сборки, когда отправляется команда ADB, я снова получаю приглашение с другим отпечатком ключа RSA

Это похоже на изменение отпечатка RSA каждый раз при новой сборке запущен, но их вопрос касается docker / gitlab-ci.


person Adam    schedule 12.09.2018    source источник
comment
хотя ваша конкретная платформа виртуализации может отличаться (от платформы в вопросе, который вы связали), но основная причина проблемы (непостоянный домашний каталог пользователя) остается прежней.   -  person Alex P.    schedule 13.09.2018
comment
Ключ хоста ADB по умолчанию зависит от пользователя. В вашей настройке вы можете использовать ключ для конкретного компьютера. Это должно быть возможно с помощью переменной среды ADB_KEYS_PATH.   -  person Robert    schedule 13.09.2018
comment
Кажется, мне удалось заставить его работать, установив системную переменную среды ADB_VENDOR_KEYS, но только при установке ее в файл, а не в папку. Например, c:\adb_keys\adbkey работает, а не c:\adb_keys, где adbkey - ключ. Я предполагаю, что ADB_KEYS_PATH тоже работает, но запуск adb показывает список переменных env, из которых следует, что ADB_VENDOR_KEYS - это то, что мы должны использовать.   -  person Adam    schedule 19.09.2018
comment
Что интересно, когда никто не вошел в систему и эта переменная env не установлена, я могу включить отладку. Я предполагаю, что где-то в системе был размещен ключ adbkey, но я не могу его найти.   -  person Adam    schedule 19.09.2018


Ответы (1)


Чтобы исправить это, вам нужно будет создать общесистемный ключ ADB и указать ADB, где он использует переменную среды ADB_VENDOR_KEYS.

ADB_VENDOR_KEYS описывается как список ключей (файлов или каталогов), разделенных двоеточиями. Вы должны иметь возможность установить его в каталог, но в то время я мог заставить его работать только с файлом. Поскольку ADB запускается в службе, очень важно установить это как системную переменную среды, а не как переменную среды пользователя.

Шаги настройки:

  • Создайте adbkey, запустив adb start-server или adb devices. Их ключ будет находиться в C:\Users\<yourname>\.android. Если вы уже используете adb (вероятно, так), сервер adb уже будет запущен и ключ уже будет создан.
  • Создайте папку типа C:\adb_keys и скопируйте ключ в эту папку.
  • Добавьте системную переменную среды с именем ADB_VENDOR_KEYS со значением C:\adb_keys\adbkey или там, где когда-либо был помещен ключ на предыдущем шаге.
  • Authorize the USB debugging connection. The steps below may be overkill, but should make sure that no snags are encountered.
    • Close and re-open the command prompt (or restart the computer) to be able to use the new the environmental variable
    • Отключите устройство
    • Убить ADB сервер. adb kill-server
    • Отмените авторизацию отладки USB на устройстве. Настройки> Параметры разработчика> Отменить авторизацию отладки USB.
    • Отключить и снова включить отладку по USB на устройстве.
    • Подключите устройство
    • Запустите сервер ADB. adb start-server или adb devices
    • Примите "Разрешить отладку по USB?" с установленным флажком "Всегда разрешать с этого компьютера"

Перезагрузите компьютер и поставьте в очередь новую сборку, использующую ADB, и все должно работать.

person Adam    schedule 19.09.2018