Introdução
Neste artigo, tentarei descrever um exemplo de infraestrutura para autotestes de aplicativos Android (automação móvel), ou seja, um ambiente para a realização de autotestes de IU em um emulador de dispositivo Android em um ambiente virtual.
Requisitos:
O emulador de Android requer tecnologia de virtualização Intel ou suporte de virtualização AMD . Portanto, um testador freqüentemente se depara com a necessidade de executar testes apenas em um ambiente de PC nativo com acesso direto ao processador central.
Nesse caso, o esquema é o seguinte:

Dificuldades:
Não há como recriar facilmente o ambiente do emulador.
O ambiente não é criado antes do teste e após o teste não é excluído, portanto, o ambiente pode afetar o aplicativo em teste.
Demora muito para consertar e configurar o ambiente.
A solução sugerida neste artigo:
Crie uma VM usando os recursos de virtualização aninhada VirtualBox (uma descrição mais detalhada da tecnologia neste artigo).
Encaminhe o suporte Intel-VT ou KVM dentro da máquina virtual criada.
VM Android .
UI .
VM.
:

:
VM , . .
, .
:
c: Intel i5-1035G1
: 12Gb
BIOS
OC: Ubuntu 20.4
1: OS
. VNC . , Linux, Windows, Mac ..
x11vnc
:
sudo apt-get update #
sudo apt install x11vnc # x11vnc
sudo x11vnc -storepasswd < > /etc/x11vnc.pass #
sudo chmod ugo+r /etc/x11vnc.pass #
:
x11vnc -nevershared -forever -dontdisconnect -many -noxfixes -rfbauth /etc/x11vnc.pass
VirtualBox
:
sudo apt-get update
sudo apt install gcc make linux-headers-$(uname -r) dkms
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" >> /etc/apt/sources.list.d/virtualbox.list'
sudo apt update #
sudo apt install virtualbox-6.1
VM
VM VirtualBox . VM code-first
CPU - ( )
- 4Gb


Nested Virtualization :
VBoxManage modifyvm < VM> --nested-hw-virt on
VM.
2: VM
. Packer, VM .
Ubuntu .
KVM
egrep -c '(vmx|svm)' /proc/cpuinfo # 0 - , 1 - KVM
sudo apt-get update #
sudo apt install qemu qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager # KVM
sudo usermod -G libvirt -a ubuntu # ubuntu libvirt
sudo systemctl status libvirtd # libvirt
sudo kvm-ok # KVM
Android command line tools
sudo apt-get update #
yes | sudo apt install android-sdk # Android SDK
sudo apt install unzip # unzip
cd ~/Downloads # Downloads
wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip # command line tools Google
sudo unzip commandlinetools-linux-6858069_latest.zip -d /usr/lib/android-sdk/cmdline-tools/ #
sudo mv /usr/lib/android-sdk/cmdline-tools/cmdline-tools /usr/lib/android-sdk/cmdline-tools/tools # . , Google , SDK
export ANDROID_SDK_ROOT=/usr/lib/android-sdk #
export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/cmdline-tools/tools/bin # Path
export PATH=$PATH:$ANDROID_SDK_ROOT/emulator # Path
, sdkmanager Android SDK :
sdkmanager --version
Android tools
yes | sdkmanager --licenses #
sudo chown $USER:$USER $ANDROID_SDK_ROOT -R # ANDROID_SDK_ROOT
yes | sdkmanager "cmdline-tools;latest" # cmdline-tools
sdkmanager "build-tools;30.0.3" # build-tools
sdkmanager "platform-tools" # platform-tools
sdkmanager "platforms;android-30"
sdkmanager "sources;android-30"
sdkmanager "emulator" # AVD manager
emulator -accel-check #,
yes | sdkmanager "system-images;android-23;google_apis;x86_64" #
sdkmanager --list # . CI .
no | avdmanager create avd -n android-23_google_apis_x86_64 -k "system-images;android-23;google_apis;x86_64" #
emulator -list-avds #
Git
Android . . .
sudo apt update #
yes | sudo apt install git # Git
git --version #
mkdir ~/workspace #
cd ~/workspace #
git clone https://github.com/panarik/AndroidClearApp.git #
cd ~/workspace/AndroidClearApp #
3: Android
./gradlew assembleDebug --no-daemon # APK
emulator -avd android-23_google_apis_x86_64 -no-audio -no-window -verbose -gpu off -accel off #
sleep 240 # ,
adb get-state #, ADB . ,
ADB :

:
./gradlew connectedAndroidTest --no-daemon
! !

, , VM.
:
VirtualBox ( )
sudo apt purge virtualbox-6.1
VM CPU:


VM :
VBoxClient
KVM
№2 . . , ADB :

! ! :

PackageManager, :

Android . Packer ( ) VirtualBox. CI Jenkins. , , .
Vou publicar todos os resultados como acréscimos a este artigo.
Idealmente, devemos ter uma infraestrutura de código para teste de IU e autotestes de integração para aplicativos Android, que podem ser instalados em qualquer PC de escritório moderno que funcione de forma autônoma, crie testes em emuladores Android nativos e não peça comida.
Muito obrigado pela sua atenção!
P.S.
Posso pedir nos comentários para dar um exemplo de sua infraestrutura usando o emulador Android? Por exemplo, emuladores em contêineres docker ( https://github.com/budtmo/docker-android ) podem ter alguns outros exemplos interessantes.