一些谷歌搜索让我相信C ++是实时2D图形编程的最佳语言,但由于Android是基于Java的,它仍然是最好的选择吗?或者我们必须使用NDK减速或其他什么事实?我的程序也有很多科学计算,我知道C ++最好/最快......
我之前从未对Android做过任何事情,所以我现在真的很无助。如果我只是错误的方式,请给我其他建议...我遇到的其他一些词汇是OpenGL(我有经验,但更多的是3D,对吗?)和Canvas(不要相当得到这个)?如果我能够访问类似GPU的功能,那就太棒了。
答案 0 :(得分:15)
Android应用程序是Java编写的,但是Android NDK允许您使用C或C ++编写程序的性能关键部分。来自Android NDK website,
Android NDK是一款配套工具 允许您构建的Android SDK 你性能至关重要的部分 本机代码中的应用。它提供 允许您使用的标题和库 构建活动,处理用户 输入,使用硬件传感器,访问 应用程序资源等等 用C或C ++编程。
也就是说,适当地使用NDK很可能不会减慢你的程序。
OpenGL 适用于3D和2D图形 - 如果您只对2D感兴趣,则需要查看使用正交投影 - 有关详细信息,请参阅glOrtho。另一方面, Android Canvas 是用于将光栅图形绘制到屏幕的Java方法。它可以让你渲染2D图形,但速度较慢(并且Android垃圾收集器频繁中断)。
请记住,如果您想在编写时使用C ++,则没有可用的STL实现。然而,有非官方端口提供大部分功能。 STLPort是我尝试过的一个成功案例。将代码移至C / C ++的最大原因是因为Android Java垃圾收集器的中断 - 如果您对代码不太过谨慎,它会经常中断您的程序以清理您留下的对象。在实践中,这可以极大地限制游戏或模拟帧率。
所有这一切,我强烈建议你研究一下即将出现的少数开源安卓游戏引擎之一。我尝试过的最好的是libGDX。它处理所有杂乱的NDK细节,并允许您纯粹用Java编写游戏/模拟代码。它以本机代码自动运行游戏引擎中性能最重要的部分,以便在Java中轻松编码,从而获得最快的性能。最重要的是,您可以编写一次应用程序代码,并将其自动运行在Windows,Linux,OSX和Android上 - 这使得测试应用程序比使用Android模拟器更容易。
如果您真的想亲自调查NDK,或者需要对OpenGL的操作进行非常精细的控制,我建议您下载Android SDK和NDK,设置eclipse,然后从NDK示例开始。那里有一个OpenGL演示,向您展示如何设置所有内容。另一个好的起点是SpinningCube谷歌项目。
编辑:我不确定你的'类似GPU的能力'是什么意思,但是使用libGDX,你可以在OpenGL ES 2.0下编译顶点和片段着色器 - 你可以使用它来运行令人尴尬的并行代码设备的GPU。答案 1 :(得分:6)
你假设Android系统太慢而无法做你想做的事情,没有任何数据来支持它。用Java编写一些测试,并首先测试性能。你不想在没有任何依据的情况下对绩效做出假设。
过早优化是其根源 万恶之物 - Knuth