sdl error android что делать
Ошибка: «Сбой инициализации SDL, причина: нет доступного видеоустройства» при запуске AVD
Эй, ребята, это убивает меня. Каждый раз, когда я пытаюсь запустить приложение для Android в Eclipse, я получаю сообщение об ошибке:
Я серьезно рассматриваю возможность перехода на 32-битную версию Ubuntu, но, похоже, из того, что я прочитал, другие люди могут заставить ее работать. Просто не я! Есть ли у кого-нибудь советы? Благодаря!
Вам нужно больше 32-битных библиотек. 😉
В Ubuntu / Debian выполните:
Я также получил ту же ошибку при запуске автоматических сборок на нашем сервере Jenkins. Я думаю, проблема заключается в том, что эмулятор должен разговаривать с дисплеем X. Если вы запускаете это на своей собственной машине, вы можете попробовать установить переменную среды DISPLAY в терминале, прежде чем пытаться запустить эмулятор. Что-то вроде:
Если вы запускаете это на безголовом сервере Jenkins, вам нужно запустить сеанс Xvnc во время сборки, чтобы предоставить X-сервер для эмулятора.
При запуске команды «эмулятор» с пользователем с недостаточными привилегиями я получаю «сбой инициализации SDL». Ex. Пользователь jenkins получает ошибку, но не root.
Перейдите в командную строку и запустите команду эмулятора с тем же пользователем, который запускает eclipse. Затем переключитесь на root и запустите команду эмулятора снова.
Если он работает с пользователем root, рассмотрите возможность установки и запуска eclipse как root
(Не рекомендуется, но я не знаю, как это сделать, это всего лишь обходной путь).
SDL 2.0 — недопустимая ошибка рендерера
Заранее благодарю за любую помощь.
Решение
Строка, которая выдает ошибку, является той, которая создает средство визуализации, но эту ошибку можно игнорировать (так как она не возвращает NULL). SDL использует макрос, чтобы проверить, в порядке ли средство визуализации, и автоматически устанавливает эту строку ошибки, если она не в порядке. Возможно, это слишком рано. Это не имеет ничего общего с вашей проблемой, хотя.
Установите их на 0 до этого или, что еще лучше, установите их на 0 в списке инициализатора:
Другие решения
Я нашел этот вопрос, потому что я получал ту же ошибку от SDL_GetError. Ответы здесь, которые указывают, что SDL_GetError может сказать «Invalid Renderer» в ситуациях, когда нет ошибок, были информативными. На SDL_GetError можно полагаться только в тех случаях, когда последняя вызванная функция SDL фактически указала на ошибку.
Моя ситуация была немного другой, хотя. Я вызывал SDL_WaitEventTimeout, который возвращает 1, чтобы указать раннее возвращение из-за события, или 0 для истекшего таймера или для ошибки, и заставляет пользователя полагаться на SDL_GetError, чтобы определить, произошла ли ошибка. В этом случае крайне важно вызвать SDL_ClearError перед вызовом SDL_WaitEventTimeout. Кроме того, SDL_GetError возвращает пустую строку, а не нулевой указатель, когда нет ошибки.
Попробуйте изменить флаги, которые вы передаете SDL_CreateRenderer (). У меня возникла та же проблема, что и у вас, и я в конечном итоге обнаружил, что на моей машине SDL имеет проблемы с аппаратным ускорением рендеринга (что по умолчанию). Попробуйте изменить это SDL_RENDERER_ACCELERATED к SDL_RENDERER_SOFTWARE и посмотрите, поможет ли это.
SDL init failure, reason is: No available video device
I tried to start my avd on Ubuntu 64bit 10.10, but it failed and shows the following in the log:
What can I do with that?
I tried to search for solutions and someone says it needs x11/sdl/jdk library and I installed them all but it still does not work.
11 Answers 11
For Fedora 14 and 16 64bit.
Install these packages:
I just encountered this problem on Ubuntu 12.04 64-bit (Precise) and solved it by installing the 32-bit version of libsdl:
I finally got this to work after installing:
also works on Debian/Sid amd64 with the foreign architecture i386.
If working on a 64 bit linux system you should use the emulator64* commands instead of the emulator* commands without the «64» in their name.
I get the «SDL init failure» when running the «emulator» command with a user with not enough privileges. Ex. jenkins user gets the error, but not root.
Drop to the commandline and run the emulator command with your normal user. You should get the same error.
Then switch to root and run emulator command again to see if user permissions or missing/wrong user environment variables is the cause of your problem.
Couple of things: Run your emulator call with strace, that’ll tell you where it’s going sideways. May not necessarily allow you to fix it easily though.
It could be a number of things, the fact that your on 64 bit ubuntu tells me that there are probably missing libraries (32bit).
Check out the link and see if anyone has come up with a faq for Ubuntu 64
The following command
also works on ubuntu 13.10
thank you to crimeminister
Uncheck «Show emulator window» in Jenkins job configuration at android section.
Not the answer you’re looking for? Browse other questions tagged android avd or ask your own question.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.11.12.40742
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Методы лечения различных ошибок в Android Studio при разработке проекта
Сегодня хотел бы поделиться своим анализом и способами лечением разных ошибок при разработке своего продукта в Android Studio. Лично я, не раз сталкивался с различными проблемами и ошибками при компиляции и/или тестировании мобильного приложения. Данный процесс, всегда однообразный и в 99% случаев и всегда нужно тратить n-колличество времени на его устранение. Даже, когда ты уже сталкивался с данной проблемой, ты все равно идешь в поисковик и вспоминаешь, как же решить ту или иную ситуацию.
Я для себя завел файлик, в котором отметил самые частые ошибки — потратив на это несколько часов и перечислил самые популярные ошибки (в дальнейшем планирую просто их запомнить), чтоб сократить свое время в дальнейшем.
2) После внезапного выключения компьютера, после перезапуска может быть во всех проектах весь код красным. Перед этим может быть ошибка: Unable to create Debug Bridge: Unable to start adb server: Unable to obtain result of ‘adb version’. Есть три решения — первое помогло, второе нет (но может быть для другого случая), а третье — не пробовал:
а) File — Invalidate Caches/Restart — Invalidate and Restart
в) Нажать Ctrl-Alt-O и запустить оптимизацию импорта.
Кстати, adb сервер можно проверить на версию (и работоспособность) и затем перезапустить:
3) Если Android Studio выдает приблизительно такую ошибку: Error:Execution failed for task ‘:app:dexDebug’.
Такое же решение если ошибка типа: «не могу удалить (создать) папку или файл» и указан путь, который в ведет в app/build. Тоже удаляем папку build и ребилдим проект.
4) В сообщении об ошибке упоминается heap — виртуальная память. А ошибка обычно вызвана ее нехваткой, т.е. невозможностью получить запрашиваемый объем. Поэтому этот запрашиваемый объем надо уменьшить, т.е. переписать дефолтное значение (обычно 2048 MB которое можно изменить в настройках), на меньшее 1024 MB.
В файле проекта gradle.properties пишем:
5) Android Studio пришет примерно такую ошибку: Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to «83648b99316049d63656d7276cb19cc7e95d70a5»
Возможные причины (кроме необходимости регулярного обновления SDK):
а) Загруженный проект был скомпилирован с помощью уже несовместимого старого gradle плагина. В этом случае надо найти и подключить в своем build.gradle проекта этот более старый плагин. т.е. попробовать более старые версии, например: 1.1.3 (часто именно 1.1.x и подходит).
Найти все версии можно здесь.
б) Если в build.gradle проекта используется beta-версия плагина — это означает, что срок ее истек. Посмотреть последние релизы (продакшн и бета) можно также здесь:
6) Иногда при подключении сторонних библиотек могут дублироваться некоторые файлы (обычно связанные с лицензированием). В сообщении будет что-то содержащее слова: duplicate files. Решение — надо посмотреть в сообщении об ошибке или в документации подключенной сторонней библиотеки — какие именно файлы стали избыточными, и перечислить их в build.gradle модуля для исключения (exclude) из билда.
Это делается в директиве packagingOptions (которая, в свою очередь, находится в директиве android).
SDL2: Основы
К сожалению, даже на официальной вики почти не возможно найти каких либо примеров использования SDL2.x, что уж говорить о рунете. Пытаясь разобраться, я нашел всего лишь пару статей, которые не покрыли и трети моих вопросов.
SDL 2.x существенно отличается от 1.x и даже, если в прошлом вам приходилось с ним работать — теперь вы рискуете ничего не понять.
Начнем с самого начала:
Инициализация SDL
Начнем, пожалуй, с создания объекта класса SDL_DisplayMode.
Он нам очень пригодится, если мы хотим иметь приложение на весь экран.
Этот объект нужно создать до инициализации самого SDL.
После этого нужно проинициализировать сам SDL:
Флаг SDL_INIT_EVERYTHING инициализирует все подсистемы SDL. Если вам нужно только что то конкретное, то на вики можно найти их полный перечень.
Пришло время заняться нашим окном!
Тут все предельно просто, создаем указатель на объект класса SDL_Window и вызываем функцию
В итоге на выходе получаем такой код:
Теперь нам нужно создать рендерер:
Теперь SDL готов с нами сотрудничать!
Вывод на экран
И еще пару строк, чтобы чуть позже мы смогли зумировать нашего персонажа:
И вот мы добрались до загрузки текстур.
Я покажу 2 способа:
Объект этой структуры позволяет загрузить в себя любое BMP изображение, для дальнейшего перевода в текстуру. Однако ее немодифицируемое использование влечет за собой ограничения.
Как пример: чистый SDL работает только с BMP, которое поддерживает альфа-канал, только в 32-битном цвете, а он поддерживается для этого формата далеко не на каждой ОС. А тут уже теряется вся польза от кроссплатформенности SDL.
Ну вот, с теорией разобрались, пора к практике!
Его особенность в том, что он без велосипедов передает альфа-канал.
Теперь у нас есть текстура персонажа готовая показаться на экране. Но перед этим нам нужно еще создать фон.
Вариант номер ДВА:
Фон мы создадим с использованием чистого SDL. Просто потому, что мы можем!
Работая с чистым SDL никогда нельзя забывать делать проверки на ошибки!
И вот наконец то, УРА, пришло время вывести это на экран!
События
Думаю не стоит объяснять что из 2-х картинок игры не выйдет.
Время добавить немного динамики к нашему чуду!
Для начало нужно создать парочку бесконечных циклов, которые работают пока есть события и нет выхода:
Это нам пригодится чтобы иметь возможность отображать или не отображать ту или иную текстуру.
А теперь вставляем этот код во внутренний цикл.
Думаю это не требует пояснений, если вы внимательно читали и занимаетесь программированием больше 21 дня, но все же уточню, что event.button.button ждет специальный флаг SDLя, который вы сможете легко найти на вики, а event.type ждет флага о типе события, полный список которых находится все там же!
Мы уже можем закрыть окно кликом по левому верхнему углу экрана! И даже более того, мы можем убрать и вернуть персонажа когда захотим просто кликнув по нему!
Да, я тоже чувствую, как ощущение власти начинает нас захлестывать, но не время останавливаться, впереди еще клавиатура!
Она нужна что бы отслеживать состояния кнопок.
Еще вне нашей главной функции надо добавить много-много кода, который сделает нашу программу более структурированной.
(Вижу кто то уже начал писать о том, что нужно пользоваться классами и библиотеками, но я хочу напомнить, что это туториал и будет не хорошо, если человек запутается собирая код, поэтому будем писать все максимально просто. Приношу свои извинения тем, чьи чувства я задел!)
И теперь возвращаемся во внутренний цикл и добавляем еще много-много кода:
Осталось вывести полученный результат на экран. Для этого добавляем в цикл:
Закрываем цикл!
И в итоге нам осталось только завершить нашу программу.
Занавес!
Перед тем как все закончить нам нужно удалить наши текстуры из памяти.
И теперь можно смело завершать работу SDL и программы:
Финал, овации! Мы написали первую программу на SDL2! С чем я нас поздравляю!
Что бы создать такую элементарную программу у меня ушло 2 дня. В интернете настолько мало мануалов по SDL2, что проще застрелиться чем что то найти.
Очень надеюсь, что Вам эта статья была полезна и этот монстр не отберет у вас так много времени, как у меня.