跨平台的iPhone / Android代码共享
简单地说:在iPhone和Android版本之间共享/重复使用代码的最有效方法是什么?
我认为两个最常见的情况是:
- 空白的石板新项目,提前知道有一大块可重复使用的逻辑,需要在每个设备上运行。
- 现有的iPhone代码库,C,C ++和Objective-C的移植到Android NDK或其他。
当然,在一个完美的世界里,所有的应用程序都会插入到神奇的云中,所有可重用的逻辑都将在Google App Engine或某些Web服务中运行,但这不是这个问题的精神。 在经历了一个iPhone到Android的端口,没有任何代码重用,并且看到人们不得不忍受的痛苦之后,我想知道其他人是如何避免的。
根据我的经验,您可以使用Android NDK编译C和C ++,因此如果您在iPhone中使用iPhone Obj-C ++(.mm)绑定作为C ++ / C引擎,并且在Android中使用Java绑定到同一个引擎,这应该是完全可能的。
所以C + + / C引擎(Android和iPhone几乎相同的代码库)+精简绑定层=便携式代码。
就像我刚才提到一个问过类似问题的人一样,使用MVC,在C ++中实现MC,在obj-c或Java中实现V。
在普通的旧C(或C ++,如果需要)写尽可能多的,只是在Android和iPhone包括相同的文件。 也可以在Windows / Mac上运行。 “跨平台”图书馆倾向于消耗你。
你可以用Marmalade SDK编译一次,编译一次到原生的ARM,用相同的二进制,标准的C / C ++,在Windows或者Mac上开发,包括许多可选的中间件技术,部署到Android和iPhone上。
我一直在用自己的框架开发使用Lua创buildiPhone应用程序和游戏。 这样我最终可以使用Android NDK为Android实现相同的框架,但实际的应用程序代码希望两个平台完全一样。
我不认为有一个简单的方法来做到这一点,因为API显然是不同的,本地编程语言是不同的,但build立自己的框架在任何两种平台支持的语言,将是我的build议。 也许已经有一个框架,将为你做的困难的东西? 如果没有这样的框架,那么这显然是一个自己实现的机会。
XMLVM看起来值得一试。
我使用BatteryTech作为我的平台抽象的东西,我的项目结构如下所示:
在我的电脑上:
游戏名称 – 只包含通用代码
gamename-android – 主要包含BatteryTech的android专用代码和Androidconfiguration,构build者指向通用代码的gamename项目
gamename-win32 – 只用于构build到Windows,使用gamename项目的代码
在我的Mac上:
游戏名称 – 只包含通用代码
gamename-ios – iPhone / iPad构build,导入通用代码
gamename-osx – OSX本机构build。 导入通用代码。
我使用SVN在我的PC和Mac之间共享。 我唯一真正的问题是当我添加类到Windows中的公共代码库,然后在Mac上更新从SVN拉下来。 XCode没有办法在没有脚本的情况下自动将它们添加到项目中,所以我必须每次手动将它们拖入,这是一个痛苦,但不是世界末日。
所有这些东西都与BatteryTech一起提供,所以一旦得到它就很容易弄清楚。
摩艾是免费的小型项目,也用于大型工作室。 我自己做自制的,但如果没有,我可能会自己使用摩埃,因为它看起来非常有前途。 他们声称它是Mac,PC,iOS,Android的端口,我甚至认为Kindle Fire。
我想你会想在Lua中编写大部分代码,但是你可以访问所有的代码,所以你可以在需要的时候使用C ++。
你也可以看看titanium 。 说他们的工具,你可以写你的应用程序在抽象的networking代码,他们将帮助您的所有这些GPS,加速度传感器等networking应用程序接口。