用C ++开发Android游戏


26

因此,作为一个主要的c / c ++开发人员,我一直认为对我来说,移动游戏开发的唯一选择是使用iOS,它可以使用c / c ++(并最小化目标C)。

我从朋友那里听说,android有一个本机开发工具包,它允许c ++代码在android上工作。

有没有人使用过,如果这样,您如何找到它?我的意思是,它会像iOS一样“正常工作”吗,或者由于可用的Android设备种类繁多,还需要考虑更多注意事项吗?

Answers:


26

Android API是Java。自2010年以来,Google为C / C ++开发人员提供了NDK(一种SDK)。

NDK提供两种方式:

  • 对于android 1.5设备,您可以加载一个elf库,并通过JNI桥从java应用程序中使用它
  • 对于android 2.3设备,您可以使用NativeActivity绕过全屏应用程序的Java活动代码。

NDK提供了一些C / C ++ API:

  • 一个伪造的仿生学,称为仿生学:许多功能不可用
  • 一个pthread库
  • OpenGL ES 1.x(> Android 1.5)和OpenGL ES 2.x(Android 2.0)
  • OpenSL(对Android 2.3的有限支持)

但是许多API仅是Java(也可以通过JNI获得)。

NDK 5版本是第一个可用于C ++开发人员的版本,因为它提供:

  • RTTI
  • 异常支持
  • STLport
  • gdb对多线程程序的支持

最痛苦的操作是在android设备上进行调试。因此,我开发了自己的多平台框架(OS X,Windows,Linux,iOS和Android),以首先在台式机平台上调试,然后在iOS平台(在Simulator上)和Last(Android)上进行调试。

android模拟器(不是模拟器)的性能较差,无法模拟OpenGL ES2.x。我建议开发真正的设备。

您可以找到许多有用的信息:


现在,“输入代码”链接已断开。
Josh1billion 2012年

1
固定:将Ellismarkov更改为IOPixel
Ellis

9

我已经成功地使用Android NDK将两个SDL + OpenGL游戏移植到Android,发现它出奇的简单。我有一个200行的Java包装器,它创建GL上下文并提供实用程序类,例如输入,声音和图像加载,以供C ++代码回调。NDK中的“ San-Angeles”示例程序是一个很好的起点。

顺便说一下,无需使用Java就可以构建C / C ++程序,但是我发现通过不时地回调JVM来访问某些OS级方法很方便。

我认为,如果您的游戏已经可以在Linux上编译,那么您会感到宾至如归。在我当前项目中的100多个文件中,只有4个具有#ifdef ANDROID_NDK指令(图像和声音相关的类)。

实际上,大部分时间用于移植游戏是由于我不知道的已知模拟器错误


在过去的早些时候,我遇到过(令人沮丧的)问题,试图在Android模拟器上获得编译/构建/部署我的opengl游戏的简单管道。您能指出我可以使用的资源或东西吗?(我不知道您是否拥有这些实用工具类的开源软件,但是如果您这样做,我将有兴趣看到它们。)谢谢
brainydexter 2011年

1
@brainydexter:我是一个命令行的家伙谁享有的自动工具,所以我不知道我对你非常有帮助的,但我的管道如下:确保ANDROID_NDK_ROOT设置,它是在$PATH(连同[sdk_location]/tools[sdl_location]/platform-tools); 转到项目目录;使用编译NDK代码ndk-build; 编译Java代码并使用编译包ant compile; 使用上载到仿真器或连接的设备ant install。至于引擎的开源,我还没有决定,但是我已经在博客
sam hocevar 2011年

感谢您的链接!我会密切注意您的博客。
brainydexter 2011年

4

从1.5版到Android NDK,Android都支持本机应用程序,它将很好地覆盖您的目标受众。您仍然需要一个简单的Android Java应用程序,该应用程序通过JNI加载应用程序的本机端并向前传递例如输入和渲染调用。

NDK有多个版本,但是您可以使用最新的NDK并选择要支持的目标API。从Android 2.3版开始,您可以在本机端执行更多操作,并且需要较少的Java代码,但是当前对2.3的设备支持非常有限。

原生Android C / C ++开发至少在全屏游戏中是可行的解决方案,移植现有C / C ++ OpenGL ES应用程序所需的工作量很小。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.