VirtualBox - Jalankan emulator Android di lingkungan virtual untuk menguji proyek Android

pengantar

Pada artikel kali ini, saya akan mencoba menjelaskan contoh infrastruktur untuk autotest aplikasi Android (mobile automation) yaitu lingkungan untuk melakukan autotest UI pada emulator perangkat Android dalam lingkungan virtual.





Persyaratan:

Emulator Android memerlukan dukungan Intel Virtualization Technology atau AMD Virtualization . Oleh karena itu, penguji sering dihadapkan pada kebutuhan untuk menjalankan testcans hanya di lingkungan PC asli dengan akses langsung ke prosesor pusat.





Dalam hal ini, skemanya adalah sebagai berikut:









Kesulitan:

  1. Tidak ada cara untuk membuat ulang lingkungan emulator dengan mudah.





  2. Lingkungan tidak dibuat sebelum pengujian, dan setelah pengujian tidak dihapus, sehingga lingkungan dapat mempengaruhi aplikasi yang sedang diuji.





  3. Butuh waktu lama untuk memperbaiki dan mengonfigurasi lingkungan.





Solusi yang disarankan dalam artikel ini:

  1. Buat VM menggunakan kemampuan virtualisasi bersarang VirtualBox (penjelasan lebih rinci tentang teknologi di artikel ini ).





  2. Teruskan dukungan Intel-VT atau KVM di dalam mesin virtual yang dibuat.





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





Saya akan mempublikasikan semua hasil sebagai tambahan untuk artikel ini.





Idealnya, kita harus memiliki infrastruktur kode-pertama untuk pengujian UI dan autotests integrasi untuk aplikasi Android, yang dapat diinstal pada PC kantor modern mana pun yang bekerja secara mandiri, membuat pengujian pada emulator Android asli dan tidak meminta makanan.





Terima kasih banyak atas perhatiannya!









P.S.





Bolehkah saya meminta Anda di kolom komentar untuk memberikan contoh infrastruktur Anda menggunakan emulator Android? Misalnya, emulator dalam kontainer buruh pelabuhan ( https://github.com/budtmo/docker-android ) mungkin memiliki beberapa contoh menarik lainnya.








All Articles