Android SDL2 App 黑屏然后退出
Android SDL2 App black screen then exits
我有一个在Windows中运行的SDL2演示,但是当我将此代码移植到Android时,完成的应用程序将显示黑屏几秒钟,然后悄悄退出(没有错误,什么都没有),而不是在游戏循环中显示漂亮的测试图形。
如果我在 main 的开头添加对 SDL_ShowSimpleMessageBox
的调用,什么都不会发生(我后来了解到它还没有为 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
。通过向Application.mk
添加APP_PLATFORM := android-9
来修复。
第三个问题是NDK-BUILD无法识别C++11,所以我在Application.mk
中添加了APP_CPPFLAGS += -std=c++11
。
第四个问题是NDK-BUILD找不到#include <cstdarg>
(用于va_list
和va_start
)。包括<SDL.h>
反而解决了这个问题。
第五个问题是ant
构建failing at [aapt] Generating resource IDs
。我在Android SDK管理器中通过删除构建工具版本21.1.1并安装版本20来解决此问题。
这是我第一次在这里发帖寻求帮助,因为我很绝望。我是一名资深的C++程序员,但在 Java 方面完全是新手。我在 Windows SDL2 的 eclipse 中使用C++,并且完全从命令行构建了 apk。
在几种不同的设备上试用。查看日志猫,有一个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)
我发现了问题。随意拍打我的手腕。
我一直假设我可以使用 8 位对齐指针寻址内存。在过去的25年里,这一直对我有用,直到现在。我的代码在面向 Android 时失败,因为它使用的任何 CPU 都拒绝使用 8 位对齐的指针寻址内存。因此,一旦我沿着字节对齐的黄油移动指针并将该指针投射到对象并引用该指针 BAM,android 就会悄悄退出应用程序。
现在的问题是如何处理这个问题?它记录了我在过去 2 个月中遇到的所有问题和解决方案,所以一定对某人有用吗?
我遇到了类似的问题,但原因却完全不同。启动应用程序后,它仍然保持黑色,并且似乎在半秒钟后最小化。切换到应用程序也再次将其最小化。
事实证明,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
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- boost::asio如何生成多个协同程序,然后加入它们
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何让LLDB在成功时退出,在失败时等待
- C++控制台应用程序阻止退出
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 程序在执行程序的其余部分之前退出
- 构造函数在退出函数时无法初始化一个参数
- 为什么异常不退出程序?
- 在std::thread中,joinable()然后join()线程安全吗
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 如何运行进程,然后在它退出时收到通知
- 使用ENUM输入和退出菜单,然后切换SFML
- 监视C++OpenFrameworks应用程序是否冻结或内存泄漏,然后强制退出并重新启动
- Android SDL2 App 黑屏然后退出
- 应用程序退出,然后在控制台中挂起