请注意,我几乎专门从事“业务/实用程序/生产力”应用程序;严重依赖相当标准的 UI 元素并希望与他们的平台很好地集成的东西。这个答案反映了这一点。请参阅 Mitch Lindgren 对 Shaggy Frog 的回答的评论,以获得对情况完全不同的游戏开发者的好评。
我相信@Shaggy Frog 在这里是不正确的。如果您有有效的、经过测试的 C++ 代码,那么没有理由不在 Android 和 iPhone 之间共享它,而且我从事的项目就是这样做的,并且它可能非常成功。然而,有些危险是应该避免的。
最关键的是,要小心“最小公分母”。自包含的算法代码,共享性非常好。管理线程、在网络上交谈或以其他方式与操作系统交互的复杂框架更具挑战性,但要以一种不会迫使您打破平台范式并为在所有平台上同样糟糕工作的 LCD 射击的方式来完成. 特别是,我建议使用平台的框架编写您的网络代码。这通常需要一种“三明治”方法,其中顶层是特定于平台的,最底层是特定于平台的,而中间层是可移植的。如果精心设计,这是一件非常好的事情。
线程管理和计时器也应该使用平台的框架来完成。特别是,Java 大量使用线程,而 iOS 通常依靠其 runloop 来避免线程。当 iOS 确实使用线程时,强烈首选 GCD。同样,这里的解决方案是隔离真正可移植的算法,并让特定于平台的代码管理它的调用方式。
如果你有一个复杂的、现有的框架,它有大量线程并且有很多网络或 UI 代码遍布其中,那么共享它可能会很困难,但我的建议仍然是寻找重构它的方法,而不是重写它。
作为一名 iOS 和 Mac 开发人员,广泛使用在 Linux、Windows 和 Android 上共享的跨平台代码,我可以说 Android 是迄今为止最令人讨厌的共享平台(Windows 曾经拥有这种区别,但 Android 自爆它离开)。Android 在大多数情况下共享代码是不明智的。但是代码重用的机会还是很多的,应该去追求。