Доля мобильного трафика увеличивается каждый год. Современный человек мобилен и ему проще получить информацию с экрана собственного смартфона. Поэтому в тренде разработка мобильных приложений. При разработке и тестировании важно иметь доступ к разнообразным устройствам, чтобы приложение корректно отрабатывало на всевозможных моделях смартфонов. Рассмотрим различные варианты доступа к устройствам.
Один из способов — облачные фермы мобильных устройств:
SAMSUNG Developres: Remote Test Lab
Firebase Test Lab
BrowserStack
AWS Device Farm
App Center
Sauce Labs
Некоторые из них бесплатные – с ограниченным количеством устройств, другие – платные, с большим парком девайсов. Через них можно получить удаленный доступ к реальным устройствам и отследить баги, возникающие на устройствах, но не воспроизводимые на эмуляторах.
Другой способ – создание своей фермы андроид-смартфонов, благодаря которой сотрудники из разных городов и стран могут подключаться к офисным устройствам. Рассмотрим, как можно сделать свою собственную ферму Android-устройств через проект Open STF
Обновляем apt-get:
Устаналиваем зависимости для OpenSTF (Node.js, NPM, GraphicsMagick, ZeroMQ, Protocol Buffers, yasm, pkg-config, adb).
Скачиваем deb пакет RethinkDB (пакет недоступен для Ubuntu 18.04 через apt):
Установка OpenSTF:
Если при установке появляются ошибки, что npm не может получить доступ к /usr/local/lib или /usr/local/bin, то предоставьте к ним доступ:
И перезапустите
Установить homebrew:
Скачать и установить все зависимости:
Если при установке protobuf возникает следующая ошибка:
То нужно создать папку /usr/local/Frameworks и дать права на запись в нее:
Установка OpenSTF:
Возможна через Cygwin, но официально не поддерживается разработчиками.
Для работы OpenSTF нужно прежде запустить RethinkDB.
Далее запустить сам openstf
По умолчанию OpenSTF самостоятельно определяет и подключает устройство без перезагрузки при подключении к машине мобильных устройств.
Но в Ubuntu возможны проблемы:
Если в openstf не видно мобильное устройство и выдается следующее сообщение логах openstf:
а команда adb devices выдает следующий вывод:
То придется добавлять устройство вручную:
Для этого запускаем
и находим устройство, которое не смогло определиться.
Например,
ID USB-устройства состоит из двух частей — ID производителя (первая часть ID до ‘:’, 2e04, как в примере выше) и ID модели устройства (c026).
Далее запускаем команды, где параметры ATTR{idVendor} и ATTR{idProduct} заполняете в соответствии ID некорректно найденного устройства:
Стоит учесть, что устройства рекомендуется подключать через отдельный USB-хаб с отдельным питанием (например, вот такой).
Одной из особенностей фермы является то, что из-за постоянной зарядки срок службы аккумуляторов мобильных устройств будет ограничен 2-3 годами, так что если на устройстве аккумулятор съемный — есть смысл заранее его приобрести. На устройствах можно выключить режим, при котором экран устройства постоянно включен при зарядке (достаточно оставить настройку, что отключать экран автоматически после 30 секунд бездействия), т.к. OpenSTF умеет самостоятельно включать экран, когда это нужно — это увеличит срок использования устройства. Важно сказать, что OpenSTF не должен быть доступен извне корпоративной сети, кроме как через VPN, так как нормальной авторизации для него нет.
Запуск OpenSTF:

Запуск приложения Google Play в OpenSTF

Список подключенных устройств в OpenSTF

Настройка информации по устройствам в OpenSTF

Таким образом, своя ферма Android-устройств помогает настроить доступ к офисным устройствам для удаленных сотрудников, тем самым повышая качество разрабатываемых приложений. Она имеет свои плюсы и минусы, которые стоит учесть.
Один из способов — облачные фермы мобильных устройств:
SAMSUNG Developres: Remote Test Lab
Firebase Test Lab
BrowserStack
AWS Device Farm
App Center
Sauce Labs
Некоторые из них бесплатные – с ограниченным количеством устройств, другие – платные, с большим парком девайсов. Через них можно получить удаленный доступ к реальным устройствам и отследить баги, возникающие на устройствах, но не воспроизводимые на эмуляторах.
Другой способ – создание своей фермы андроид-смартфонов, благодаря которой сотрудники из разных городов и стран могут подключаться к офисным устройствам. Рассмотрим, как можно сделать свою собственную ферму Android-устройств через проект Open STF
Установка на Ubuntu 18.04:
Обновляем apt-get:
sudo apt-get update
Устаналиваем зависимости для OpenSTF (Node.js, NPM, GraphicsMagick, ZeroMQ, Protocol Buffers, yasm, pkg-config, adb).
sudo apt-get install nodejs npm graphicsmagick libzmq3-dev protobuf-compiler libprotobuf-dev yasm pkg-config android-tools-adb
Скачиваем deb пакет RethinkDB (пакет недоступен для Ubuntu 18.04 через apt):
wget https://github.com/srh/rethinkdb/releases/download/v2.3.6.srh.1/rethinkdb_2.3.6.srh.1.0bionic_amd64.deb
sudo dpkg -i rethinkdb_2.3.6.srh.1.0bionic_amd64.deb
Установка OpenSTF:
npm install -g stf
Если при установке появляются ошибки, что npm не может получить доступ к /usr/local/lib или /usr/local/bin, то предоставьте к ним доступ:
sudo chown -R $USER /usr/local/lib
sudo chown -R $USER /usr/local/bin
И перезапустите
npm install -g stf
Установка на MacOS X:
Установить homebrew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Скачать и установить все зависимости:
brew install node rethinkdb graphicsmagick zeromq protobuf yasm pkg-config homebrew/cask/android-platform-tools
Если при установке protobuf возникает следующая ошибка:
Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/Frameworks
Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks
То нужно создать папку /usr/local/Frameworks и дать права на запись в нее:
sudo mkdir /usr/local/Frameworks
sudo chown $USER /usr/local/Frameworks
Установка OpenSTF:
npm install -g stf
Установка на Windows:
Возможна через Cygwin, но официально не поддерживается разработчиками.
Запуск
Для работы OpenSTF нужно прежде запустить RethinkDB.
rethinkdb
Далее запустить сам openstf
stf local --public-ip <ip-адрес машины>
Подключение устройств:
По умолчанию OpenSTF самостоятельно определяет и подключает устройство без перезагрузки при подключении к машине мобильных устройств.
Но в Ubuntu возможны проблемы:
Если в openstf не видно мобильное устройство и выдается следующее сообщение логах openstf:
Unhandled rejection Error: Illegal value for Message.Field .DeviceIntroductionMessage.status of type enum: undefined (not a valid enum value)
а команда adb devices выдает следующий вывод:
List of devices attached
??????? no permissions (verify udev rules); see [http://developer.android.com/tools/device.html]
То придется добавлять устройство вручную:
Для этого запускаем
lsusb
и находим устройство, которое не смогло определиться.
Например,
Bus 001 Device 010: ID 2e04:c026
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
ID USB-устройства состоит из двух частей — ID производителя (первая часть ID до ‘:’, 2e04, как в примере выше) и ID модели устройства (c026).
Далее запускаем команды, где параметры ATTR{idVendor} и ATTR{idProduct} заполняете в соответствии ID некорректно найденного устройства:
echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="2e04", ATTR{idProduct}=="c026", MODE="0666"' | sudo tee /etc/udev/rules.d/99-android.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --verbose --action=add --subsystem-match=usb
Стоит учесть, что устройства рекомендуется подключать через отдельный USB-хаб с отдельным питанием (например, вот такой).
Одной из особенностей фермы является то, что из-за постоянной зарядки срок службы аккумуляторов мобильных устройств будет ограничен 2-3 годами, так что если на устройстве аккумулятор съемный — есть смысл заранее его приобрести. На устройствах можно выключить режим, при котором экран устройства постоянно включен при зарядке (достаточно оставить настройку, что отключать экран автоматически после 30 секунд бездействия), т.к. OpenSTF умеет самостоятельно включать экран, когда это нужно — это увеличит срок использования устройства. Важно сказать, что OpenSTF не должен быть доступен извне корпоративной сети, кроме как через VPN, так как нормальной авторизации для него нет.
Скриншоты запущенной программы
Запуск OpenSTF:

Запуск приложения Google Play в OpenSTF

Список подключенных устройств в OpenSTF

Настройка информации по устройствам в OpenSTF

Таким образом, своя ферма Android-устройств помогает настроить доступ к офисным устройствам для удаленных сотрудников, тем самым повышая качество разрабатываемых приложений. Она имеет свои плюсы и минусы, которые стоит учесть.