sdl error android что делать
Проблемы Android SDL
Ситуация следующая.
Собрал готовый проект SDL для android.
Хочу переименовать, меняю org.libsdl.app на что-то своё, чтобы потом можно было распространять.
Меняю название везде где можно. Всё собирается, а потом падает как доходит до SDLActivity.nativeResume();
Вот что в лог пишет
P.S. В res/value/strings.xml предлагается вводить имя приложения. И оно и вправду меняется, на смартфоне будет так и подписанно. Но истинное название всё равно не поменяется? (делаю backup через Uninstaller этого приложения, вижу имя org.libsdl.app) Тогда его потом нельзя будет в google play выложить?
Может где-то не нашёл где надо переименовать?
Обычные проекты, собранные по шаблону удаётся переименовать переписав package и создав новую папку для Java файла, а SDL’овский не получается. Падает при вызове стартовой native функции.
P.S. ну я и дурак))) Ну там же в cpp файлах такие штуки, Java_org_libsdl_app_SDLActivity_nativeInit() вот и падает. надо их как-то переименовать
eyenie
Не знал что так можно, теперь буду знать на будущее
Подскажите ещё, пожалуйста
Почему, когда я закрываю приложение и включаю его снова, экран становится чёрным
В лог пишет «Old EGL Context doesnt work, trying with a new one»,
а потом много раз повторяет
«waitForCondition(LockCondition) timed out»
О каком старом контексте идёт речь, если приложение загружается абсолютно повторно с самого начала с метода onCreate()?
Как можно это исправить?
Ошибка: «Сбой инициализации SDL, причина: нет доступного видеоустройства» при запуске AVD
Эй, ребята, это убивает меня. Каждый раз, когда я пытаюсь запустить приложение для Android в Eclipse, я получаю сообщение об ошибке:
Я серьезно рассматриваю возможность перехода на 32-битную версию Ubuntu, но, похоже, из того, что я прочитал, другие люди могут заставить ее работать. Просто не я! Есть ли у кого-нибудь советы? Благодаря!
Вам нужно больше 32-битных библиотек. 😉
В Ubuntu / Debian выполните:
Я также получил ту же ошибку при запуске автоматических сборок на нашем сервере Jenkins. Я думаю, проблема заключается в том, что эмулятор должен разговаривать с дисплеем X. Если вы запускаете это на своей собственной машине, вы можете попробовать установить переменную среды DISPLAY в терминале, прежде чем пытаться запустить эмулятор. Что-то вроде:
Если вы запускаете это на безголовом сервере Jenkins, вам нужно запустить сеанс Xvnc во время сборки, чтобы предоставить X-сервер для эмулятора.
При запуске команды «эмулятор» с пользователем с недостаточными привилегиями я получаю «сбой инициализации SDL». Ex. Пользователь jenkins получает ошибку, но не root.
Перейдите в командную строку и запустите команду эмулятора с тем же пользователем, который запускает eclipse. Затем переключитесь на root и запустите команду эмулятора снова.
Если он работает с пользователем root, рассмотрите возможность установки и запуска eclipse как root
(Не рекомендуется, но я не знаю, как это сделать, это всего лишь обходной путь).
Santa Simplicita
Просто писать о простом — не так и просто…
Android+SDL: Будь мужиком, пиши на C!
Я люблю C.
Я любою джаву не меньше, но это совсем не то чувство первой любви, которое я испытываю к C.
Я никогда не работал с SDL, но мне кажется, что он очень удобен для написания игр. По крайней мере я бы купился на его кросс-платформенность. Тем более, что теперь в списке его платформ еще и Android.
Установка
Я использовал версию из репозитория (SDL 2.0):
Далее необходимо несколько изменить структуру папок, чтобы получился Android-проект.
1) Копируем папку SDL/android-project в, скажем, sdl-demo (это наша папка с SDL проектом)
2) Копируем саму папку SDL в sdl-demo/jni (получаем sdl-demo/jni/SDL)
3) Редактируем jni/src/Android.mk, заменив YourSourceHere.c на список файлов вашего проекта (для простоты — только main.c)
4) Создадим этот самый main.c (путь к нему: sdl-demo/jni/src/main.c).
5) Теперь native-часть нашего проекта должна собираться.
Вот как это было у меня:
Доработать напильником
И хотя libSDL готова, этого еще недостаточно чтобы заставить ее работать под Android. Дело в том, что SDL для Android — это кружево из native-функций, и все они вызываются из Java-класса SDLActivity (см. sdl-demo/src/org/libsdl/app/SDLActivity.java).
Так вот, общая схема работы такая: запустить отдельный поток, а в нем SDL_main().
А после выхода из SDL_main().. не делать ничего. Хотя, логично было бы завершить Activity.
Это можно сделать руками. В просто случае это runOnUiThread()+finish(). Но я сделал через статические методы, по аналогии с COMMAND_CHANGE_TITLE:
Теперь можно обновить проект, если надо, и собрать его целиком:
Пример
Теперь вы можете писать приложения на SDL в main.c. Вот что получилось у меня:
Данный пример я по кускам спёр в разных уголках интернета, но в целом он понятен: создали окно (640х480 — это логические размеры, физические берутся из onSurfaceChanged()). Потом делаем рендерер, и загружаем текстуру. Текстура загружается из «assets/data/test.bmp».
Затем в цикле рисуем текстуру с помощью рендерера, и ждем следующего события. Особым образом обрабатываем нажание на кнопку «Back» — завершаем наш цикл. А потом чистим все ресурсы.
Итоги
Собираем, запускаем. На телефоне выглядит примерно так:
SDL для Android: наш hello world
Теперь можно учить SDL и писать игры. Хотя путь еще долгий — хочется SDL_ttf, SDL_image, чтобы работать с комфортом. Но это уже совсем другая история.
Кстати, overhead от использования SDL ни много ни мало — 200-300 Кб.
Все исходники (около 6 мегабайт, SDL много весит, и так удалил тесты и папку контроля версий): https://rapidshare.com/files/4157028483/sdl-android.tar.gz
Лучше, пожалуй, какой-то скрипт для развертывания SDL-проекта написать.
UPD: Ссылка на rapidshare безнадежно устарела. Сделал заново по инструкциям для свежего SDL: https://dl.dropboxusercontent.com/u/5689099/sdl-demo.tar.gz
Share this:
Понравилось это:
Похожее
16 comments on “ Android+SDL: Будь мужиком, пиши на C! ”
Спасибо за подробный разбор.
спасибо, а проект можешь целиком выложить?
Залил на rapidshare (см. ссылку внизу поста). Enjoy!
о, оперативно, спасибо.
ты не в курсе, как быть со старыми функциями SDL_SetVideoMode, SDL_DisplayFormat, SDL_Flip, в новой версии их нет, есть какие-то замены или как?
Посмотри в SDL/src/SDL_compat.c и SDL/include/SDL_compat.h в исходниках с сайта: http://www.libsdl.org/tmp/SDL-2.0.tar.gz
А ты в курсе как грузится линукс(Android) в SMP multicore? Т.е. с чего он стартует (0-е ядро?) и в каком месте и как начинает использовать остальные ядра?
Ой. Чё-то не заметил сразу коммент, сорри.
Ну вкратце загрузка с SMP для интела описана тут — http://tldp.org/HOWTO/Linux-i386-Boot-Code-HOWTO/smpboot.html
Вообще штука это аппаратно-зависимая, но в целом это все происходит внутри start_kernel() с вызовом smp_init().
Для армов с картинками тут немного есть — http://www.linux-arm.org/LinuxBootLoader/SMPBoot
скачал Ваш проект, ничего не менял, с помощью eclipse создал проект с готовых исходников, эмулятор андроид 4.03, запустил. в итоге на месте, где надо грузить изображение — крешится( не подскажете, в чем может быть дело?
Я совсем не знаком с android (так случилось, что надо протестировать sdl для него), и я не понимаю, как (КАК. ) картинка, которая находится в папке “assets/data/test.bmp”, но по отношению к коду main.c совсем не там — может подгружаться правильно? Это магия андроида?)
Наверное потому что андроид приложение — это zip-архив который на лету распаковывается и выполняется, то получается, что вся работа с файлами-ресурсами в составе приложений происходит особым образом.
Это можно увидеть в сорцах SDL: В SDL_android.c есть функиця Android_JNI_FileOpen, которая открывает файл не через fopen/open, а через java-классы типа AssetManager. Так вот SDL_rwops.c (в котором функции работы с файлами в SDL) использует как раз Android_JNI_FileOPen. Так что не удивляйтесь, все относительные пути начинаются от папки assets/.
ммм… пробовал запустить на реальном устройстве — тоже ничего не получилось. и кажется проблема как раз в загрузке изображения
LOG(«. created renderer»);
bitmapSurface = SDL_LoadBMP(«data/test.bmp»);
LOG(«. urrraa»);
до «ура» оно не доходит. ничего не понимаю…
Если интересно, то это проблема как рас 4го андроида. http://bugzilla.libsdl.org/show_bug.cgi?id=1500
Serg! Очень интересный блог и этот пост в частности! Не могу взять исходники с рапидшары — ссылка не работает… а хочется посмотреть(
ДА вот это настоящая кросплатформенность! Скопировал тупо код пример и хоть это мелочь но все работает! http://s017.radikal.ru/i427/1401/fe/894b437fc8fe.png
Спасибо, действительно нормальный пример кода.
Как исправить android ошибки во всех приложениях
Если вы обладатель смартфона с ОС Android, то при использовании устройства может возникнуть сбой, при котором появится сообщение android ошибки во всех приложениях. В таком случае, вы можете нажать ОК и ошибка перестанет возникать, но в некоторых случаях это не избавит от ошибки навсегда. В каких случаях возникает ошибка всех приложений на андроид?
Часть 1: Причины появления android ошибок во всех приложениях
Это может быть при сбое в ПО (программном обеспечении), при заражении вирусом, а также при неправильной установки ПЗУ или же из-за удаленного файла ОС. Также эта ошибка может привести к разряжению батареи и снижении производительности устройства.
В этой статье мы расскажем, как исправить такую проблему, как ошибка во всех приложений на андроид.
Часть 2: Как исправить android ошибки во всех приложениях
Если возниклась ошибка во всех приложений на вашем андроиде, не волнуйтесь. Пожалуйста, сначала попробуйте перезагрузить телефон.
Есть еще один способ перезагрузить устройство на базе Андроид.
Многие модели смартфонов производятся без съемной батареи, что не дает возможность извлечь аккумулятор из телефона и таким образом перезагрузить устройство. Чтобы выполнить принудительную перезагрузку устройства и исправить android ошибки в приложении, выполните следующие шаги:
Способ 2. Очистить данные и кэш приложений
Если перезагрузка смартфона не помогла исправить android ошибки во всех приложениях, то попробуйте выполнить очистку данных и кэща в приложениях.
Выберите «Очистить данные»;
Выполнив все эти шаги, вы можете избавиться от android ошибки во всех приложениях. Также если эта ошибка возникает в каком-то конкретном приложении, вы можете войти в Google Play, удалить это приложение и заново его установить.
Способ 3. Исправить android ошибки во всех приложениях через Tenorshare ReiBoot for Android
На Android устройстве могут возникать различного рода ошибки, которые не исчезают при обычной перезагрузки телефона. Если вышеуказанные способы не помогли устранить android ошибки во всех приложениях, на помощь приходит программа, которая способна исправить сбой в андроиде быстро и легко – Tenorshare ReiBoot for Android.
Запустите программу ReiBoot вашем ПК и нажмите «Исправление системы Android»;
Потом нажмите “Исправить сейчас”;
После этого появляются некоторые информации, которые вам надо выполнить. Потом нажмите “Далее”;
Далее загрузите пакет прошивки;
После выполнения загрузки вам надо выбрать опцию “Исправить сейчас”.
Способ 4: Сброс настроек к заводским
Если вышеуказанные способы не помогли вам исправить завис самсенг, сделайте сброс данных. При сбросе данных из памяти удаляются все файлы, обнуляются настройки операционной системы, а вместе с этим удаляются ошибки. Вам надо заранее копировать ваши данные.
Шаг 2. Нажмите «Общие настройки». Если такого пункта нет, перейдите к следующему шагу.
Шаг 3. Выберите пункт «Сброс». Также он может называться «Архивация и сброс», «Архивирование и сброс» или «Конфиденциальность».
Шаг 4. Выберите «Сброс данных» или «Сброс устройства»
Шаг 5. Выберите пункт «Сбросить», «Сброс устройства» или «Удалить все».
И ваше устройство перезагрузится и данные удалятся.
Резюме:
Если вдруг у вас возникла ошибка всех приложений на андроид «com android systemUI произошла ошибка», то попробуйте вышеуказанные методы. Любое неправильно выполненное самостоятельное действие в процессе восстановления устройства может привести к необратимым последствиям, включая поломку вашего смартфона. А Tenorshare ReiBoot for Android предлагает всего за пару кликов выполнить действия по устранению системных ошибок с пошаговыми инструкциями. Tenorshare ReiBoot for Android сможет помочь вам в исправлении более 50 системных проблем андроида. Скачайте и установите программу прямо сейчас, чтобы устранить ошибку «com android systemUI».
Обновление 2021-10-20 / Обновление для Android Проблемы и Решения
Подготовка SDL2-проекта для запуска на android
Всем привет. Сегодня мы посмотрим как подготовить проект с использованием библиотеки sdl2 для запуска игры на android.
Для начала надо скачать Android Studio, установить её и всё что требуется в этой среде для разработки. Например у меня сейчас Kde Neon, и в этой системе существует файл /etc/environment, такой же файл есть и в ubuntu. Там надо прописать такие переменные.
Также надо скачать NDK с официального сайта распаковать его в домашний каталог и переименовать в NDK. Далее нужно скачать библиотеку SDL2 с сайта libsdl.org. Чтобы использовать sdl2 для android, важно не компилировать его для компьютера, потому что тогда это не скомпилируется для android. Чтобы проект скомпилировался, надо создать проект в android studio, любой, чтобы принять лицензию, иначе при сборке SDL2 будет просить лицензию.
Чтобы считывать файлы в android из assets, нужно использовать функции SDL_RWops. Вот пример использования в коде по работе со шрифтом. В этом случае мы не может использовать FT_New_Face, а вместо этого будем использовать FT_New_Memory_Face, чтобы использовать уже считанные данные.
Также я создал файл заголовок для подключения SDL2 заголовков. NO_SDL_GLEXT нужен, чтобы компиляция прошла успешно для Android.
Итак проект готов, шейдеры готовы для Opengl Es 3.0. Теперь надо создать android-project. Для этого распаковываем архив SDL2. Заходим в build-scripts. И выполняем так.
Появится такое сообщение.
Переходим в com.xverizex.test. Заходим в com.xverizex.test/app/jni/src. Копируем свой проект игры. И меняем файл Android.mk, в моём случае это выглядит так.
Как вы может уже заметили, я подключаю ещё библиотеку Freetype2. Я нашел уже готовую на github для android, но она не работала, нужно было кое что поменять. Также создаем каталог app/src/main/assets. В него помещаем наши ресурсы ( шрифты, спрайты, 3d модельки ).