gpt4 book ai didi

android - 如何在不需要 Android 操作系统源代码的情况下在 Android NDK 中创建一个新的 NativeWindow?

转载 作者:太空狗 更新时间:2023-10-29 14:16:38 45 4
gpt4 key购买 nike

我想编译一个 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... 然后如果我继续下载更多头文件到我的本地项目,我最终会遇到链接错误。我想知道是否有更简单的方法来使用 NDK 构建 gl_basic.cpp(具有 main() 函数的 Android OpenGL 可执行文件)之类的东西。

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

另外让我补充一点,我知道您可以在 Android.mk 文件中放置“include $(BUILD_EXECUTABLE)”,在 Application.mk 文件中放置“APP_ABI := x86”。我使用 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 中包含的 header 和库创建原生窗口?我知道这可以通过从 libui 调用 android_createDisplaySurface() 来完成。但是,libui 并未包含在 NDK 中。那么我如何使用纯 C++(无 Java)代码从 NDK 创建一个本地窗口(供 EGL 和 OpenGL 使用)? eglCreateWindowSurface() 的第三个参数是 NativeWindowType,所以我需要以某种方式创建一个 NativeWindow。

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

最佳答案

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

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

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

您只需要 libD.so 来匹配对象 A.o 中的符号和 libB.a 中的所有引用对象,但不需要libC.so 的依赖项。

关于android - 如何在不需要 Android 操作系统源代码的情况下在 Android NDK 中创建一个新的 NativeWindow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21280393/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com