21

我刚刚完成了一个相对较大的 Android 项目,但我知道它永远不会在太阳系这一侧最普遍的手机之一上运行(那个果味小俱乐部)。

因此,对于我的下一个项目,我想以一种使大多数组件在 iPhone 和 Android 平台之间轻松传输的方式编写它。我正在考虑这样做的方式是在 Objective-C 中编码大部分内容,然后分别在更多 Objective-C 和 Java 中添加特定于平台的部分。在 Android 端,这将需要使用 NDK。

我的C知识不错,但是Objective-C的知识接近于零,没有学习C++的欲望。上面的方法有多健全,还有更好的方法吗?有什么方法可以让我用 Java 编写代码并且仍然可以进入未破解的 iPhone 市场?我认识的人(iPhone 用户)在明年之前拥有 Android 手机的可能性有多大?

4

13 回答 13

24

退后一步,想想你最终能在逻辑上分享什么。

UI 模型完全不同,组件也不同。最后,您可能能够分享的是数据对象类,可能是一些算法。甚至不像过去那样实际上最终会共享网络代码,因为您不是直接使用套接字,而是使用 HTTP 库。

那么,您为此付出的所有努力最终真的会得到回报吗?在我看来,最终结果将是一个难以更新的脆弱混乱,并且在两个平台上都是平庸的,而不是在任何一个平台上都很棒。

你为什么要写应用程序?让您或您的用户的生活更轻松?

于 2010-03-06T23:35:24.940 回答
16

其他人基本上都这么说,但我想更明确一点。你最好的选择可能是写:

  1. 跨平台数据模型和核心逻辑,使用:
    • 一些GNUstep (Obj-C),或
    • CF-Lite (C),或
    • 无论您想要什么,只要它是跨平台的:P
  2. 仅 iPhone 的界面代码,使用 Cocoa Touch (Obj-C)
  3. 仅限 Android 的界面代码,但他们为 Android 执行此操作。

这是尽可能接近的;毫无疑问,任何编写跨平台界面代码的尝试都会导致在这两个平台上的应用程序平庸。但是,让所有其余的代码可移植并且只围绕它包装一个特定于设备的接口一直都在完成,并且对于一些 iPhone 开发人员来说效果很好。

于 2010-03-07T00:08:06.230 回答
11

没有 Cocoa 的 Objective-C 不是那么有用,并且不会让你更接近拥有一个工作的 iPhone 代码库。您最好使用 Core Foundation 用 C 语言编写核心,并使用 Java 或 Objective-C 作为平台特定部分。Apple 已将大部分 Core Foundation 开源为 CF-Lite,并且它与 OS X 上的 Cocoa 进行了免费桥接(即,您可以将许多 CF 类与它们的 Cocoa 对应物互换使用)。

于 2010-03-06T22:57:09.373 回答
9

我的猜测,没有经验支持它,你可能可以用谷歌的 NDK 以某种方式编写 Obj-C,因为 ARM 存在 GCC,是开源的,有一个 Obj-C 编译器和一个基本的 Obj-C 运行时(如果它还没有可能被破解以在新架构上工作)等。

对于可疑的好处,这也可能是很多工作。

当然,“Obj-C”(没有NS类)的含义与“Cocoa”非常不同,这是大多数人说“Obj-C”时的真正意思。您也许可以为此重用一些 GNUstep,但是……老实说,我对此表示怀疑。听起来又是一项繁重的工作。

所以,是的,我认为这是可能的。这也是很多工作,我认为这不值得。

鉴于您所说,如果我尝试这样做,我会很想用 C 编写尽可能多的核心逻辑,然后为每个平台用两个单独的 GUI 包装它。

于 2010-03-06T22:12:50.923 回答
2

从不同的角度来看...我知道您说过您想尝试并坚持使用 Java,但是如果您了解 C#,那么您可以使用适用于 iPhone 的 MonoTouch 框架。Mono 本质上是 .Net 堆栈的开源实现。Mono 团队正在努力将 Mono 引入 Android,因此您基本上可以为您的业务逻辑编写一个共享的 C# 库,并且每个平台都有不同的视图/控制器。当然,这一切都在 C# 中,而且成本更高,但它确实解决了用不同语言编写所有内容的问题。

我相信它在 iPhone 上称为MonoTouch,在 Android 上称为 MonoDroid。

于 2010-03-07T01:17:25.147 回答
2

Apportable SDK是一种 Objective-C 方法,只需编写一次即可部署到 IOS 和 Android。它将一个正在运行的 IOS Xcode 项目交叉编译为一个 Android SDK。

请参阅此处了解下载后几分钟内可在两个平台上运行的示例应用程序。

于 2013-05-23T21:36:24.830 回答
1

这是来自 facebook 的 mobile @scale 会议的演讲,其中两个团队(dropbox 和管弦乐队)使用了类似的方法。Dropbox 使用 C++ 创建 libdropbox,Orchestra(邮箱)使用 Objective-c 创建 libmailbox。

同样,他们使用平台原生语言编写前端,并将跨平台库用于核心逻辑和数据。

我拿走的主要好处:邮箱在 5 周内从 ios 转到 android,因为它只是构建 UI 代码。Dropbox 可以通过 Android beta 部署对共享库中核心功能的更改进行 beta 测试,这样更容易为 beta 构建进行大规模部署。

于 2013-11-13T21:30:52.340 回答
1

我意识到这可能有点晚了,但似乎这个行业现在正朝着 Web 应用程序的方向发展,以实现应用程序的可移植性。也就是说,在您的“骨架原生应用程序”中嵌入网络浏览器,并为 Android、iOS 和其他主要智能手机平台编写 javascript、css 和 html。

有一些工具可以帮助您。您可能想查看PhoneGapSencha Touch,但还有更多。请注意,这种方法可能不适合实时/动画密集型应用程序。

于 2012-04-11T16:01:43.577 回答
1

XMLVM 是一个能够将(某些)Android 应用程序转换为 iPhone 的项目。有关更多信息,请访问http://xmlvm.org/android/

于 2010-03-26T12:26:11.067 回答
1

我自己还没有尝试过,也没有看完演讲,但是YouTube 上有一个关于使用 Java 开发 iPhone 应用程序的 Google 技术演讲,看起来很有希望。

于 2010-03-13T16:40:11.257 回答
1

我不确定Android,但是使用iPhone,只要将其包装在Objective-C类中,您基本上就可以直接编写C。

于 2010-03-06T23:25:01.027 回答
1

Objective-C 运行时尚未移植到 Android。它不应该做太多的工作,但是,如果没有语言的工作知识,我怀疑你会很容易移植它。

您尝试做的事情对于通用应用程序来说很难,但如果您选择使用纯 C 语言开发游戏(Android NDK 和 iPhone 都支持),那么对于游戏来说应该是可行的。您必须编写一些胶水代码才能将来自 Obj-C 和 Java 环境的输入事件传递到您的 C 代码中,但这应该不是什么大问题 - Objective-C 允许您直接调用您的 C 代码并且有很多示例项目可以为 Android 做到这一点。

于 2010-03-13T01:11:41.107 回答
0

如果你能等到今年晚些时候(具体时间未知),Adobe 将拥有适用于 Android 的 AIR 和适用于 iPhone 的编译器。因此,您可以在 AIR for Android 中编写应用程序,并使用大部分相同的代码编译到 iPhone。

http://labs.adobe.com/technologies/flashcs5/appsfor_iphone/

即使您迫不及待,请参阅: http: //www.insideria.com/2008/12/actionscript-to-cocoa---protot.html,其中解释了 ActionScript 和 Cocoa 之间的相似之处。

另请查看:http ://labs.adobe.com/technologies/air2/了解能够使用触摸屏的 AIR 版本。

因此,您可以很快编写一次并使用 ActionScript 3 部署到 Android 和 iPhone。

于 2010-03-25T17:41:52.563 回答