【发布时间】:2014-02-12 08:40:12
【问题描述】:
我想编译一个 Android OpenGL 控制台应用程序,您可以直接从控制台启动 Android x86 或从 Android x86 GUI 中的 Android 终端应用程序运行它。
这篇文章 (How can I create a new NativeWindow in Android NDK?) 提出了类似的问题。但是,答案说要下载并构建整个android源代码,因为这里的测试(https://android.googlesource.com/platform/frameworks/base/+/refs/heads/gingerbread-release/opengl/tests)例如(https://android.googlesource.com/platform/frameworks/base/+/refs/heads/gingerbread-release/opengl/tests/gl_basic/gl_basic.cpp)具有诸如“#include”之类的依赖项
我想用 NDK 构建理想的应用程序,但如有必要,我可以在 Ubuntu 上构建它。
gl_basic.cpp 会很棒,除了我不想为了构建这么小的程序而下载和构建整个 Android 源代码(gl_basic.cpp 只有 364 行代码!)
我尝试使用 ndk-build.cmd 构建 gl_basic.cpp,但我得到 FramebufferNativeWindow.h not found... 然后,如果我继续将更多头文件下载到本地项目,我最终会遇到链接错误。我想知道是否有更简单的方法来使用 NDK 构建诸如 gl_basic.cpp(带有 main() 函数的 Android OpenGL 可执行文件)之类的东西。
PS 我知道编写 Android 应用程序的常规方法是创建一个 APK,但我不想这样做 - 我想要一个可以从 Android 运行的带有 main() 和 OpenGL 的独立 Linux 可执行文件在 Android 内部运行的终端仿真器应用程序...在基于 x86 的 Android(不是 ARM)上。
另外让我补充一点,我知道您可以将“include $(BUILD_EXECUTABLE)”放在 Android.mk 文件中,将“APP_ABI := x86”放在 Application.mk 文件中。我使用 ndk-build.cmd 构建 Android 可执行文件没有问题,该可执行文件从 x86 Android 上的 Android Terminal Emulator 运行并使用 printf() 打印“hello world”。
我遇到的问题是使用 OpenGL 创建这样的可执行文件。我认为部分魔法是 FramebufferNativeWindow.h,但它也有自己的包含...我想知道我是否可以使用 ndk-build.cmd 构建类似于 gl_basic.cpp 的东西(甚至在 Ubuntu 上使用 make 和 gcc ) 将在 Android Terminal Emulator 中运行...但我不想下载和构建整个 Android 源代码树。
总结:如何创建带有 NDK 中包含的标头和库的本机窗口?我知道可以通过从 libui 调用 android_createDisplaySurface() 来完成。但是,libui 不包含在 NDK 中。那么如何使用纯 C++(无 Java)代码从 NDK 创建本机窗口(供 EGL 和 OpenGL 使用)? eglCreateWindowSurface() 的第三个参数是 NativeWindowType,所以我需要以某种方式创建一个 NativeWindow。
总结:我的最终目标是编写一个带有绘制 OpenGL 三角形的 main() 函数的 C++ 可执行文件,我可以在 Android x86 控制台模式下运行它。没有 Java。
【问题讨论】:
标签: android c++ opengl-es android-ndk