При запуске emulator
(см. Appium: Android Virtual Device, Original error: Condition unmet after 60159 ms и костыль) – возникает ошибка qt_setup.cpp:28:Qt library not found:
[139824804910912]:ERROR:android/android-emu/android/qt/qt_setup.cpp:28:Qt library not found at ../emulator/lib64/qt/lib
Could not launch ‘/home/projectname/projectname/../emulator/qemu/linux-x86_64/qemu-system-i386’: No such file or directory
Девайс запускается из Jenkins-джобы:
node('android') { stage('Run UI tests') { ws('/home/projectname/projectname') { sh '/usr/local/bin/appium -p 4723 --session-override > /home/projectname/appium.log &' sh "emulator -avd Nexus_5X_API_26 &> /home/projectname/emulator.log &" sleep 10 sh "cd /home/projectname/projectname" git branch: 'master', poll: false, url: '[email protected]:projectname-dev/projectname.git' sh 'mvn clean -Dmaven.test.failure.ignore=false test -P linux-emulator-8.0' sh 'pkill -f appium || true' sh "adb -e emu kill" } } }
После чего в логе /home/projectname/emulator.log
видна ошибка.
Проблема возникает из-за того, что файл qemu-system-i386
ищется по относительному пути от точки запуска, т.е. в /home/projectname/projectname/../emulator/
, в то время как он находится в:
[simterm]
projectname@projectname-ci:~$ find /android/ -name qemu-system-i386 /android/Android/sdk/emulator/qemu/linux-x86_64/qemu-system-i386
[/simterm]
Решение – запускать эмулятор непосредственно из каталога, где расположен emulator
, в нашем случае это /android/Android/sdk/tools
(продолжаем костылить 🙂 ).
Обновляем запуск, добавляем cd
:
node('android') { stage('Run UI tests') { ws('/home/projectname/projectname') { sh '/usr/local/bin/appium -p 4723 --session-override > /home/projectname/appium.log &' sh "cd /android/Android/sdk/tools/ && emulator -avd Nexus_5X_API_26 &> /home/projectname/emulator.log &" sleep 10 sh "cd /home/projectname/projectname" git branch: 'master', poll: false, url: '[email protected]:projectname-dev/projectname.git' sh 'mvn clean -Dmaven.test.failure.ignore=false test -P linux-emulator-8.0' sh 'pkill -f appium || true' sh "adb -e emu kill" } } }
Запускаем джобу, проверяем наличие эмулятора:
[simterm]
projectname@projectname-ci:~$ ps aux | grep emul projectname 4488 351 5.8 3617872 950528 ? Sl 13:28 1:06 /android/Android/sdk/tools/../emulator/qemu/linux-x86_64/qemu-system-i386 -avd Nexus_5X_API_26 projectname 4492 0.0 0.1 109240 19644 ? Sl 13:28 0:00 ../emulator/emulator64-crash-service -pipe 4 -ppid 4488 -data-dir /tmp/android-projectname/19d6f7a7-76a2-43cc-b00f-38908ac47013 projectname 4741 358 3.0 7464340 505244 ? Sl 13:28 0:14 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -classpath /usr/share/maven/boot/plexus-classworlds-2.x.jar -Dclassworlds.conf=/usr/share/maven/bin/m2.conf -Dmaven.home=/usr/share/maven -Dmaven.multiModuleProjectDirectory=/home/projectname/projectname org.codehaus.plexus.classworlds.launcher.Launcher clean -Dmaven.test.failure.ignore=false test -P linux-emulator-8.0
[/simterm]
Готово.