问题 在100%C ++环境下为Android编程?


我一直在为我未来的游戏开发C ++游戏引擎运行时环境,并开始将android视为一个平台。我注意到它与Java紧密绑定并大量使用Java VM。

但是否可以在Android NDK中维持完整的C ++运行时环境?我没有反对Java,如果必须的话,我准备使用它,但性能是我最关心的问题之一(我打算让我的游戏占用大量资源),特别是在手机上。

如果可以使用完整的C ++环境,我将如何在Eclipse Indigo CDT中实现它?我是否能够提前为Android创建已编译的游戏可执行文件以获得最佳性能?我是否需要在Eclipse中安装任何其他插件?我可以使用MinGW来编译我的游戏,还是需要使用不同的编译器?如果我不得不以某种方式使用Java,那么甚至需要编译C ++代码吗?这些都是我想要回答的问题,以便在Eclipse IDE中获得稳定的开发环境。

请知道我对Android开发和一般的多平台编程仍然相当新。我的目标是创建一个能够充分利用新硬件的游戏引擎,特别是在手机上!

感谢您提出的任何建议!


3660
2017-10-01 18:21


起源

Android有一个特殊的JIT Java编译器,而且很大一部分Android环境都是用Java编写的。没有理由在Android上更喜欢C ++和Java的速度,而传统的性能影响并不存在。 - dtech
好吧,这是我想知道的一件大事,谢谢。我实际上刚刚找到了NativeActivity类(developer.android.com/reference/android/app/NativeActivity.html看起来很有前途,特别是因为看起来他们的目标是C ++游戏。我还需要安装Android SDK和JIT编译器吗? - AutoBotAM
JIT是Dalvik(Android的VM)的一部分,无论您是否使用NativeActivity,Dalvik都存在于系统的每个进程中 - 它用于与系统的其余部分进行通信。 - adamp
好吧,所以我假设我需要SDK和NDK以便这个工作。我将相应地在Eclipse中实现它。谢谢! - AutoBotAM


答案:


在Android 2.3(API 9)中添加的NativeActivity可能是您在仅使用C ++编写Android游戏方面所寻求的。 http://developer.android.com/reference/android/app/NativeActivity.html

但是,既然你说你是新手,你可能想要从当前可用的Android游戏引擎开始,而不是立即自己编写。移动设备与其他平台具有非常不同的约束。如果电池在下午中午死亡,手机不是很有用,所以开始一个具有“资源密集型”的既定目标的项目已经开始了。如果这意味着他们将无法在晚上打电话,很少有人会想在这里和那里玩20分钟的游戏。

如果您的意思是您正在拍摄高端图形,请记住,设备在此区域具有广泛的功能,并且仅针对高端限制您的受众。不同的GPU具有非常不同的策略和性能特征,并且所有GPU都具有闪耀或滞后的情况。最成功的手机游戏不是具有最高聚合物或最复杂的灯光着色器的游戏,它们是实现始终如一的平滑帧率并具有独特风格的游戏。

看看Android的一些现有游戏引擎并试用它们。写一些小游戏,带他们去试驾,看看他们做了什么,不要与你想要做的事情相提并论。如果你发现自己对可用的东西感觉有限,那就拿你学到的东西,尝试编写适合你想要制作的游戏类型的自己的引擎。

以下是一些可以帮助您入门的链接。这些引擎为Android Market上一些非常受欢迎的游戏提供支持,许多开发人员发现它们非常有

http://www.andengine.org/ andengine是用Java编写的,是开源的。

http://unity3d.com/ Unity基于C#和Mono。

http://www.madewithmarmalade.com/ Marmalade,以前的Airplay SDK基于C ++。


9
2017-10-01 19:01



这是一个非常好的回应。你是对的,我的目标是高端图形。我想我的意思是我想尽可能地利用资源而不会削弱电池寿命/帧速率,我希望我的游戏能够适应手机的图形功能(意味着调整多边形数量,着色器质量) , 等等)。我最近一直在研究游戏引擎架构,但在我决定如何制作我的最终运行时环境之前,我应该使用并分析现有的引擎。非常感谢adamp! - AutoBotAM


你要密切关注的答案是@ adamp's。在你自己的危险中忽略他的回答。

不过,要解决您问题中的其他几点:

我是否能够提前为Android创建已编译的游戏可执行文件以获得最佳性能?

不,只要Android不使用“已编译的游戏可执行文件”。您的C / C ++代码将被编译为Linux共享对象(.so)文件,并与APK文件中的其他内容(如清单)一起打包。但是,编译.so将提前完成。

我可以使用MinGW编译我的游戏吗?我需要使用不同的编译器吗?

我得到了一个明显的印象,你会在Windows上尝试在Cygwin中进行NDK开发。我衷心鼓励您在OS X或Linux上进行NDK开发。至少用Ubuntu或其中的东西设置一个VirtualBox来进行NDK编译。

无论如何,NDK都有自己的GCC编译器。 AFAIK,MinGW不是交叉编译器,大多数Android设备不在x86 CPU上运行。

如果我不得不以某种方式使用Java,那么甚至需要编译C ++代码吗?

是。现在,对于Honeycomb,您可以选择使用Renderscript进行OpenGL工作 - 相当于C99环境,其代码不需要使用NDK进行编译。


2
2017-10-01 19:25



好吧,如果需要,我会在某些时候使用Ubuntu设置VirtualBox。我希望我有一台价格低于600美元的OS X开发机,因为我真的想在iOS上开发。我想现在可以等了。 - AutoBotAM


我已经尝试了一大堆,并且我发现最好的一个,我发现交叉编译到一堆其他设备,让你用HTML5 / C ++组合(sweeeeet)编程你的好东西是MoSync(http://www.mosync.com/摩托罗拉的MotoDev(和另一个鲜为人知的设置更友好的一个)http://developer.motorola.com/tools/motodevstudio/?utm_campaign=mhp01092012&utm_source=mhp&utm_medium=mws

我注意到有一些虚拟机图像和教程可以用来防止设置麻烦。


0
2018-06-11 22:45