VirtualBox - Exécutez l'émulateur Android dans un environnement virtuel pour tester un projet Android

introduction

Dans cet article, je vais essayer de décrire un exemple d'infrastructure pour les autotests d'applications Android (automatisation mobile), à ​​savoir, un environnement pour effectuer des autotests d'interface utilisateur sur un émulateur d'appareil Android dans un environnement virtuel.





Exigences:

L'émulateur Android nécessite la technologie de virtualisation Intel ou la prise en charge de la virtualisation AMD . Par conséquent, un testeur est souvent confronté à la nécessité d'exécuter des tests uniquement dans un environnement PC natif avec un accès direct au processeur central.





Dans ce cas, le schéma est le suivant:









Des difficultés:

  1. Il n'existe aucun moyen de recréer facilement l'environnement de l'émulateur.





  2. L'environnement n'est pas créé avant le test et après le test n'est pas supprimé, l'environnement peut donc affecter l'application testée.





  3. Il faut beaucoup de temps pour réparer et configurer l'environnement.





La solution suggérée dans cet article:

  1. Créez une machine virtuelle à l'aide des fonctionnalités de la virtualisation imbriquée VirtualBox (une description plus détaillée de la technologie dans cet article).





  2. Transférer le support Intel-VT ou KVM à l'intérieur de la machine virtuelle créée.





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





Je publierai tous les résultats en complément de cet article.





Idéalement, nous devrions avoir une infrastructure axée sur le code pour les tests d'interface utilisateur et les autotests d'intégration pour les applications Android, qui peut être installée sur n'importe quel PC de bureau moderne qui fonctionne de manière autonome, construit des tests sur des émulateurs Android natifs et ne demande pas de nourriture.





Merci beaucoup pour votre attention!









P.S.





Puis-je vous demander dans les commentaires de donner un exemple de votre infrastructure utilisant l'émulateur Android? Par exemple, les émulateurs dans les conteneurs docker ( https://github.com/budtmo/docker-android ) peuvent avoir d'autres exemples intéressants.








All Articles