如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

2024-05-20

我想编译一个 Android OpenGL 控制台应用程序,您可以直接从控制台启动 Android x86 运行,或者从 Android x86 GUI 内的 Android 终端应用程序运行。

这个帖子 (如何在 Android NDK 中创建新的 NativeWindow? https://stackoverflow.com/questions/5375765/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) 例如 (https://android.googlesource.com/platform/frameworks/base/+/refs/heads/gingerbread-release/opengl/tests/gl_basic/gl_basic.cpp 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...然后,如果我继续将更多头文件下载到本地项目,我最终会遇到链接错误。我想知道是否有更简单的方法来使用 NDK 构建像 gl_basic.cpp (带有 main() 函数的 Android OpenGL 可执行文件)这样的东西。

PS 我知道编写 Android 应用程序的正常方法是创建 APK,但我不想这样做 - 我想要一个带有 main() 和 OpenGL 的独立 Linux 可执行文件,我可以从 Android 终端仿真器应用程序运行它在 Android 内部运行...基于 x86 的 Android(不是 ARM)。

另外让我补充一点,我知道您可以将“include $(BUILD_EXECUTABLE)”放入 Android.mk 文件中,将“APP_ABI := x86”放入 Application.mk 文件中。我使用 ndk-build.cmd 构建 Android 可执行文件没有问题,该可执行文件从 x86 Android 上的 Android 终端模拟器运行并使用 printf() 打印“hello world”。

我遇到的问题是使用 OpenGL 创建这样的可执行文件。我认为神奇的一部分是 FramebufferNativeWindow.h,但它也有自己的包含...我想知道我是否可以使用 ndk-build.cmd (甚至在 Ubuntu 上使用 make 和 gcc 构建类似于 gl_basic.cpp 的东西)将在 Android 终端模拟器中运行...但我不想下载并构建整个 Android 源代码树。

摘要:如何使用 NDK 中包含的标头和库创建本机窗口?我知道可以通过从 libui 调用 android_createDisplaySurface() 来完成。但是,libui 并未包含在 NDK 中。那么如何使用纯 C++(无 Java)代码从 NDK 创建本机窗口(供 EGL 和 OpenGL 使用)? eglCreateWindowSurface() 的第三个参数是 NativeWindowType,所以我需要以某种方式创建一个 NativeWindow。

摘要:我的最终目标是编写一个带有 main() 函数的 C++ 可执行文件,该函数可以绘制 OpenGL 三角形,并且可以在 Android x86 控制台模式上运行。没有Java。


You must下载所有必需的#includes;当您链接可执行文件时,您需要缺少的系统库来解析引用。您不需要重建这些库,您可以在目标设备中甚至从模拟器映像中找到可供使用的库。系统库来自/system/lib目录可以轻松获得adb pull命令。

请注意,链接器不需要解析所有引用:即 for 命令

ln A.o libB.a -lC -lD -o E

你只需要libD.so匹配对象中的符号A.o以及所有引用的对象libB.a,但不适用于以下依赖项libC.so.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码? 的相关文章

随机推荐