2014-01-22 38 views
3

我想编译一个Android OpenGL控制台应用程序,您可以直接从控制台启动Android x86或从Android x86 GUI中的Android终端应用程序运行。如何在不需要Android操作系统源代码的情况下在Android NDK中创建新的NativeWindow?

这篇文章(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)具有相关性,如“#包括”

我想与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 Terminal Emulator应用程序...在基于x86的Android(不是ARM)上。

另外让我补充一点,我知道你可以在Application.mk文件中的“包括$(BUILD_EXECUTABLE)”在Android.mk文件和“APP_ABI:= x86”。使用x86 Android上的Android Terminal Emulator运行ndk-build.cmd构建Android可执行文件并使用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。简介:我的最终目标是编写一个C++可执行文件,其中包含一个绘制OpenGL三角形的main()函数,可以在Android x86控制台模式下运行。没有Java。

回答

1

必须下载全部必要#include s;当您链接可执行文件时,您需要缺少的系统库来解析引用。您不需要重新编译这些库,您可以找到准备在目标设备中使用库,甚至可以从模拟器映像中使用库。使用adb pull命令可轻松获得/system/lib目录下的系统库。

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

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

你只需要libD.solibB.a从对象A.o符号和所有引用的对象匹配,但不是为了libC.so的依赖关系。

相关问题