VirtualBox: ejecute el emulador de Android en un entorno virtual para probar un proyecto de Android

Introducción

En este artículo, intentaré describir un ejemplo de una infraestructura para pruebas automáticas de aplicaciones de Android (automatización móvil), es decir, un entorno para realizar pruebas automáticas de IU en un emulador de dispositivo Android en un entorno virtual.





Requisitos:

El emulador de Android requiere tecnología de virtualización Intel o compatibilidad con virtualización AMD . Por lo tanto, un evaluador a menudo se enfrenta a la necesidad de ejecutar pruebas solo en un entorno de PC nativo con acceso directo al procesador central.





En este caso, el esquema es el siguiente:









Dificultades:

  1. No hay forma de recrear fácilmente el entorno del emulador.





  2. El entorno no se crea antes de la prueba y después de la prueba no se elimina, por lo que el entorno puede afectar la aplicación bajo prueba.





  3. Se necesita mucho tiempo para arreglar y configurar el entorno.





La solución sugerida en este artículo:

  1. Cree una máquina virtual utilizando las capacidades de virtualización anidada VirtualBox (una descripción más detallada de la tecnología en este artículo).





  2. Reenvíe el soporte Intel-VT o KVM dentro de la máquina virtual creada.





  3. VM Android .





  4. UI .





  5. VM.





:









:

  1. VM , . .





  2. , .





:

  • 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. , , .





Publicaré todos los resultados como adiciones a este artículo.





Idealmente, deberíamos tener una infraestructura de código primero para pruebas de interfaz de usuario y pruebas automáticas de integración para aplicaciones de Android, que se puede instalar en cualquier PC de oficina moderna que funcione de forma autónoma, construya pruebas en emuladores nativos de Android y no pida comida.





¡Muchas gracias por su atención!









PD





¿Puedo pedirte en los comentarios que des un ejemplo de tu infraestructura usando el emulador de Android? Por ejemplo, los emuladores en contenedores docker ( https://github.com/budtmo/docker-android ) pueden tener otros ejemplos interesantes.








All Articles