Android Studio: emulator – qt_setup.cpp:28:Qt library not found

By | 12/12/2018
 

При запуске 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: 'git@github.com: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/, в то время как он находится в:

projectname@projectname-ci:~$ find /android/ -name qemu-system-i386
/android/Android/sdk/emulator/qemu/linux-x86_64/qemu-system-i386

Решение – запускать эмулятор непосредственно из каталога, где расположен 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: 'git@github.com: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"
        }
    }
}

Запускаем джобу, проверяем наличие эмулятора:

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

Готово.