编译C++代码(Xcode)用于iOS和Android。这是真的吗?

29
我想尝试编写和编译适用于iOS和Android设备的C++代码。我已经使用Xcode一段时间了(我曾经为MacOS和Windows编写c ++代码)。因此,我想为我的目的使用Xcode。
问题在于我不知道如何同时为Android设备和iPad / iPhone编译C ++代码。我希望使用iOS和Android的跨平台解决方案,但不想使用像Marmalade(c ++)或其他框架。
这是真实的吗? :) 是否有教程或其他有用的材料?

1
你有尝试过先在谷歌上搜索吗? - crashmstr
我不了解iOS,但Android本质上是Java,因此可以通过JNI使用C++代码。 - Motomotes
1
如果您不介意使用C#,您可以使用Xamarin http://xamarin.com/monotouch - ahodder
1
@Motes 这里有Android NDK - Mike D
4
是的,你可以在 Android 和/或 iOS 项目中使用 C 或 C++ 代码。例如,Box2D(C++)和 Chipmunk(C)物理引擎都与 iOS 和 Android 100% 兼容,并且许多受欢迎的 2D 游戏使用这些物理引擎。 - Cornstalks
显示剩余2条评论
1个回答

64
你绝对可以在iOS和Android上使用C++。我已经为两者编写了自己的游戏引擎。
Xcode是iOS的常规IDE,并本地支持"Objective-C ++"开发(编译器支持Objective-CC ++)。您需要编写一个薄的Objective-C包装器来与操作系统交互,但如果您喜欢,可以在C++中编写其他所有内容。如果您下载Xcode命令行工具,还可以从脚本构建。
Eclipse是Android的通常IDE,如果您下载NDK,则可以利用JNI在Java和C++之间进行接口。与iOS类似,您至少需要一个Java包装器来与操作系统交互。
你不必局限于使用Eclipse和Xcode,例如,你可以使用emacs和/或使用CMake来帮助你整合项目设置。Emacs是一个非常强大和灵活的IDE,但它的学习曲线很陡峭,安装也不太直观。如果你在Mac上进行此操作,我建议你使用emacsformacosx,并安装ECBautocomplete。CMake基本上是一个跨平台的构建系统,允许你从一个源树构建许多不同的项目文件(Visual Studio、Xcode、Eclipse等)。就像emacs一样,这非常强大,但需要一定的学习曲线。如果你想立即开始,你可能想先从Xcode和Eclipse开始。如果你在PC上开发,你需要一个Mac VM或Hackintosh来使用Xcode,使用cygwin来使用NDK进行android开发(MacBook Pro用户可以轻松愉快地开始)。
“本地Android开发肯定更加困难。不仅要应对更多的设备分段,而且本地调试也不是很直观。你必须在设备上运行GDB服务器并连接到它以设置断点,许多人都是通过命令行来完成这个过程的。我听说有些人使用Tegra Tools for Eclipse可以获得基于GUI的IDE。

我强烈建议先在iOS上进行开发,因为你可以从IDE中获得更强大的工具。你可以跟踪内存泄漏,优化代码,轻松设置断点等等。一旦在iOS上开发了一个功能,你就可以开始处理Android本地开发中的.mk文件和其他细节。

以下是关于iOS核心对象和生命周期的一些信息:

而对于Android:

只要你与操作系统友好相处并尊重应用程序的生命周期,就可以自由地调用C++逻辑。你可以直接在iOS上这样做,但在Android上,你必须通过JNI来进行调用。如果你封装了平台特定的内容,你可以在两个平台之间共享C++逻辑。

我非常推崇C++,但在这些平台上使用它的选择取决于情况。C++不是这些平台上流行的选择,因此你将找不到太多文档(大部分时间你需要靠自己)。如果你对C++不是很熟悉,复杂性可能会增加一些(你是否熟悉RAII, design patters, STL?)。

以下是一些可能适用的情况:

  • 如果你需要使用一个由C/C++编写的库
  • 如果你想为你的应用程序或游戏构建自己的平台无关框架
  • 如果你正在处理实时/性能关键的应用程序,比如游戏

我并不是说你必须在这些情况下使用C++,因为许多人已经用Objective-C开发了游戏。我只是说如果你需要充分利用硬件或者想要更具可移植性的东西,这可能是值得考虑的。


非常有趣!您是否有关于此帖子中所讨论内容的教程? :) - JavaRunner
1
这个话题对我来说非常重要,因为我在游戏行业工作,同时也在业余时间进行游戏爱好。我一定会尽力扩展这篇文章,以提供更多的清晰度。 - Matthew Sanders
这将非常酷!:) 我从未开发过iOS应用,但我有一些在Eclipse上开发Android的经验。但现在我想尝试“移民”到C++和Xcode。并且我想建立自己的游戏框架(简单而快速 :))。 - JavaRunner
你有没有看过Juce C++框架?它非常跨平台。然而,我发现使用本地工具在UI方面更加高效,至少对于Android来说是这样的,我认为在iOS上也应该类似或更加如此。 这里有一个很好的解释和示例:https://dev59.com/M2Ml5IYBdhLWcg3wgnWl - Adamski
我们可以使用Eclipse CDT来实现这个目的吗?我们需要更改编译器以便针对两个平台吗?谢谢。 - LolaRun
1
你可以(有点)使用任何你想要的IDE。然而,为了针对iOS,你可能仍需要使用XCode编译项目。我曾经在很久以前寻找一个使用CMake进行iOS交叉编译的好例子,但当时并没有什么收获。快速搜索得到了这个。你可以尝试搜索“将C++交叉编译到iOS”。然后你还需要运行code signing - Matthew Sanders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接