Android SDL2 App черный экран затем выходит

У меня есть работающая демонстрация SDL2, работающая в Windows, но когда я портирую этот код на Android, готовое приложение будет отображать черный экран в течение нескольких секунд, а затем тихо выйдет (без ошибок, ничего), вместо того, чтобы показывать симпатичную тестовую графику в игре -loop.

Если я добавлю звонок в SDL_ShowSimpleMessageBox в начале моего main ничего не происходит (с тех пор я узнал, что он еще не реализован для Android — grrr), но если я закомментирую свой основной код, ndk-build жалуется, что он отсутствует, поэтому он, безусловно, включается в сборка, но, кажется, не вызывается.

Я следовал за шагами в README-android.txt, После примерно 200 часов решения проблем за последние 2 месяца я в конечном итоге выпустил apk. Следующие исправления, которые я сделал, возможно, что-то сломали?

Первая проблема — NDK-BUILD не удается найти SDL_config.hиз-за инструкций на шаге № 2 в README-android.txt быть неправым. Исправлена ​​реструктуризация каталогов или редактирование путей в Android.mk,

Вторая проблема — NDK-BUILD не может найти EGL/eglplatform.h, Исправлено добавлением APP_PLATFORM := android-9 в Application.mk,

Третья проблема — NDK-BUILD не распознает C ++ 11, поэтому я добавил APP_CPPFLAGS += -std=c++11 в Application.mk,

Четвертая проблема — NDK-BUILD не находит #include <cstdarg> (используется для va_list а также va_start). В том числе <SDL.h> вместо этого исправили это.

Проблема с ant строить failing at [aapt] Generating resource IDs, Я исправил это в Android SDK Manager, удалив build-tools verion 21.1.1 и установив вместо него версию 20.

Это первый раз, когда я написал здесь о помощи, потому что я в отчаянии. Я ветеран C ++, но я новичок в том, что касается Java. Я использую C ++ в Eclipse для Windows SDL2, и я полностью создал apk из командной строки.

Пробовал на нескольких разных устройствах. Глядя на LogCat, есть signal 7 SIGBUS ошибка:

V/SurfaceView( 3497): Layout: x=0 y=0 w=1280 h=720, frame=Rect(0, 0 - 1280, 720)
F/libc    ( 3497): Fatal signal 7 (SIGBUS) at 0x00000000 (code=128)
I/ActivityManager(  162): Displayed org.libsdl.app/.SDLActivity: +416ms
V/SDL     ( 3497): onWindowFocusChanged(): true
W/InputManagerService(  162): Starting input on non-focused client
com.android.internal.view.IInputMethodClient$StubProxy@410b72d8 (uid=10021 pid=331)

1

Решение

Я нашел проблему. Не стесняйтесь бить мои запястья.

Я всегда придерживался предположения, что могу обращаться к памяти с помощью 8-битных выровненных указателей. Это работало для меня в течение последних 25 лет, до сих пор. Мой код дает сбой, когда он нацелен на Android, потому что независимо от того, какой процессор он использует, он не обращается к памяти с помощью 8-битных указателей. Поэтому, как только я перемещаю указатель вдоль выровненного по байту сливочного масла и приводим этот указатель к объекту и ссылаюсь на этот указатель, BAM, android тихо выходит из приложения.

Теперь вопрос, что делать с этим вопросом? В нем записываются все проблемы и решения, с которыми я боролся за последние 2 месяца, так что, должно быть, кому-нибудь пригодится?

1

Другие решения

У меня была похожая проблема, но совсем другая причина.
После запуска приложения оно оставалось черным и, по-видимому, уменьшалось само по себе через полсекунды. Переключение на приложение также минимизировало его снова.

Оказывается, подсветка синтаксиса Makefile прослушивается в SciTE (а также, похоже, и в Stackoverflow), так что примерно так:

# LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \
LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \
$(PROJECT_PATH)/main.cpp

был фактически закомментирован полностью, но не показан как таковой. В результате я полагаю, что основная процедура из SDL используется вместо моей.

Эта проблема может быть обнаружена, глядя в скомпилированный файл с nm -C android-project/obj/local/arm64-v8a/libmain.so и заметив, что он почти не содержит функций:

00000000000004c4 t atexit
00000000000004ac t __atexit_handler_wrapper
0000000000011008 A __bss_end__
0000000000011008 A _bss_end__
0000000000011008 A __bss_start
0000000000011008 A __bss_start__
U __cxa_atexit@@LIBC
U __cxa_finalize@@LIBC
0000000000010d70 t $d
0000000000011000 d $d
0000000000011000 d __dso_handle
0000000000010d80 a _DYNAMIC
0000000000011008 A _edata
0000000000011008 A _end
0000000000011008 A __end__
0000000000010ff8 a _GLOBAL_OFFSET_TABLE_
00000000000004a0 t __on_dlclose
00000000000004ac t $x
00000000000004a0 t $x
0000000000000480 t $x
0

По вопросам рекламы [email protected]