Ответ 1
вы также можете использовать "Программное обеспечение" в опции "Эмулированная графика производительности" в настройках AVD
У меня есть эмулятор Nexus 6P API23, загруженный на моем ПК Ubuntu 15.10. Когда я пытаюсь запустить его, он выходит из строя, и появляется диалоговое окно и говорит:
(AVD config: Nexus 6P API 23 x86 - Графика Hardware-GLES 2.0)
Cannot launch AVD in emulator.
Output:
libGL error: unable to load driver: nouveau_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: nouveau
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 155 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 47
Current serial number in output stream: 46
libGL error: unable to load driver: nouveau_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: nouveau
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 155 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 47
Current serial number in output stream: 46
libGL error: unable to load driver: nouveau_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: nouveau
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 155 (GLX)
Minor opcode of failed request: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 33
Current serial number in output stream: 34
QObject::~QObject: Timers cannot be stopped from another thread
Я пробовал другие AVD, и они не работают.
вы также можете использовать "Программное обеспечение" в опции "Эмулированная графика производительности" в настройках AVD
У меня была такая же ошибка, как и у вас, и мне удалось найти обходной путь. Надеюсь, это также решит вашу проблему.
Вместо запуска эмулятора из Android Studio откройте терминал и cd в каталог инструментов с вашим каталогом Android SDK - mine - ~/Android/Sdk/tools
. Оттуда выполните команду:
LD_PRELOAD='/usr/$LIB/libstdc++.so.6' DISPLAY=:0 ./emulator -avd <insert avd name here>
Теперь вы можете запустить свое приложение с помощью студии Android, нажав зеленую стрелку запуска и выбрав только что запущенный эмулятор.
Для получения дополнительной информации о том, почему это работает, перейдите здесь
Edit:
После некоторой мысли я попробовал этот script и, похоже, работает, чтобы вы могли запустить эмулятор в Android Studio. Он заменяет исполняемый файл эмулятора bash script, который вызывает его, как указано выше. Вам нужно будет перейти на путь к правильному местоположению. Я также предлагаю сделать резервную копию каталога ваших инструментов в случае, если что-то пойдет не так:
#!/bin/bash
TOOLS_PATH='/home/user/Android/Sdk/tools'
UNEXPANDED_LIB='$LIB'
for emul in ${TOOLS_PATH}/em*
do
cp ${emul} ${emul}-orig
cat <<EOF > ${emul}
#!/bin/bash
LD_PRELOAD='/usr/$UNEXPANDED_LIB/libstdc++.so.6' ${emul}-orig "\[email protected]"
EOF
done
Мое дело: я работаю с Debian Jessie и Android Studio 2.2.3. Моя графическая карта - ATI Radeon HD 6850 от Sapphire.
Эмулятор говорит о том, что при загрузке драйвера графическая ошибка ( "ошибка libGL: невозможно загрузить драйвер: r600_dri.so" ). Как объясняется здесь, похоже, что Google упакован с Android Studio старой версией одной библиотеки (libstdС++. So.6) и эмулятор не работает, когда он пытается использовать графическую карту.
Решение? Очень просто: использовать системные библиотеки вместо пакетов в Android Studio. Как? Добавление "-use-system-libs" в конце команды. Итак:
./emulator -avd EMULATOR_NAME -netspeed full -netdelay none -use-system-libs
Окончательное решение (если вы не хотите использовать терминал) должно установить переменную среды ANDROID_EMULATOR_USE_SYSTEM_LIBS
в 1 для вашего пользователя/системы. С этим изменением, когда вы запускаете эмулятор в Android Studio, он также загружает системные библиотеки вместо упакованных.
PS - Самый простой способ установить переменную среды - изменить script, который запустит Android Studio (studio.sh, в моем случае это внутри /opt/android -stuido/bin) и добавьте в начале этого:
export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
ОБНОВЛЕНИЕ Декабрь 2017 года. У меня была такая же проблема с Debian Stretch и Android Studio 3.0.1 (та же самая графическая карта). Такое же решение работает для меня.
Ввод следующего в терминале (Ctrl-Alt-T) решил для меня:
cd $Android/Sdk/tools/lib64/libstdc++
mv libstdc++.so.6 libstdc++.so.6.bak
ln -s /usr/lib64/libstdc++.so.6
Это, по-видимому, создает символическую ссылку. Это решение было взято из строки № 23 https://code.google.com/p/android/issues/detail?id=197254#c23.
Возможно, вам придется изменить пути к файлам в зависимости от вашей установки (т.е. оригинал использовал путь ANDROID_HOME/android-sdk-linux_x86/, тогда как моя установка была только Android/Sdk/).
У меня была такая же проблема на Ubuntu 16.04 LTS и Android Studio 2.3.2, и я решил проблему, выполнив следующее в окне терминала: (ПРИМЕЧАНИЕ: я видел это где-то в Интернете, но я не могу вспомнить, где я не могу дать кредит, когда кредит должен быть)
sudo apt list "*nvidia-[0-9][0-9][0-9]"
мой ответ: nividia-346 nividia-352 nividia-361 nividia-367 nividia-375
Затем я выполнил следующее для каждого возвращаемого значения:
sudo apt install nvidia-375
sudo apt install nvidia-367
sudo apt install nvidia-361
sudo apt install nvidia-352
sudo apt install nvidia-346
Затем перезагрузите Ubuntu, и все работает нормально.