VirtualBox - Führen Sie den Android-Emulator in einer virtuellen Umgebung aus, um ein Android-Projekt zu testen

Einführung

In diesem Artikel werde ich versuchen, ein Beispiel für eine Infrastruktur für Autotests von Android-Anwendungen (mobile Automatisierung) zu beschreiben, nämlich eine Umgebung zum Durchführen von UI-Autotests auf einem Android-Geräteemulator in einer virtuellen Umgebung.





Bedarf:

Der Android-Emulator erfordert Unterstützung für Intel Virtualization Technology oder AMD Virtualization . Daher ist ein Tester häufig mit der Notwendigkeit konfrontiert, Tests nur in einer nativen PC-Umgebung mit direktem Zugriff auf den Zentralprozessor auszuführen.





In diesem Fall ist das Schema wie folgt:









Schwierigkeiten:

  1. Es gibt keine Möglichkeit, die Emulatorumgebung einfach neu zu erstellen.





  2. Die Umgebung wird vor dem Testen nicht erstellt und nach dem Testen nicht gelöscht, sodass die Umgebung Auswirkungen auf die zu testende Anwendung haben kann.





  3. Das Beheben und Konfigurieren der Umgebung dauert lange.





Die in diesem Artikel vorgeschlagene Lösung:

  1. Erstellen Sie eine VM mit den Funktionen der verschachtelten Virtualisierung VirtualBox (eine detailliertere Beschreibung der Technologie in diesem Artikel).





  2. Leiten Sie die Intel-VT- oder KVM-Unterstützung innerhalb der erstellten virtuellen Maschine weiter.





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





Ich werde alle Ergebnisse als Ergänzungen zu diesem Artikel veröffentlichen.





Im Idealfall sollten wir über eine Code-First-Infrastruktur für UI-Tests und Autotests für die Integration von Android-Anwendungen verfügen, die auf jedem modernen Büro-PC bereitgestellt werden kann, der autonom arbeitet, Tests auf nativen Android-Emulatoren erstellt und nicht nach Nahrung fragt.





Vielen Dank für Ihre Aufmerksamkeit!









P.S.





Kann ich Sie in den Kommentaren bitten, ein Beispiel für Ihre Infrastruktur mit dem Android-Emulator anzugeben? Beispielsweise könnten Emulatoren in Docker-Containern ( https://github.com/budtmo/docker-android ) einige andere interessante Beispiele haben.








All Articles