Objective-C和Android

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

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

我对C的了解很好,但我对Objective-C的了解接近于零,我不想学习C ++。 上面的方法是否合理,是否有更好的方法? 有没有什么方法可以用Java编写代码并仍然可以进入未被黑客入侵的iPhone市场? 我认识的人(iPhone用户)明年将拥有Android手机的可能性有多大?

Solutions Collecting From Web of "Objective-C和Android"

退一步思考一下你最终能够在逻辑上分享什么。

UI模型相当不同,组件不同。 最后,您可能能够共享的是数据对象类,可能还有一些算法。 它甚至不像现在那样真实地结束共享网络代码,因为你不是直接使用套接字,而是使用HTTP库。

那么你所付出的所有努力到底真的能find回报吗? 在我看来,最终的结果将是一个难以更新的脆弱混乱,并且在两个平台上都是平庸而不是在两者之间都很好。

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

其他人基本上已经这样说了,但我想让它更明确。 你最好的选择可能是写:

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

那就是你能得到的尽可能接近; 任何编写跨平台接口代码的尝试无疑都会在两个平台上产生一个平庸的应用程序。 但是,让所有其余的代码都可移植,只需将特定于设备的界面包装在一起,就可以随时完成并且对于一些iPhone开发人员来说非常有用。

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

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

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

当然,“Obj-C”(没有NS类)意味着与“Cocoa”截然不同的东西,这是大多数人在说“Obj-C”时的真正含义。 你可能可以重复使用一些GNUstep,但是……老实说,我对此表示怀疑。 听起来像是很多工作。

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

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

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

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

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

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

我不确定Android,但是只要你把它包装在Objective-C类中,就可以用iPhone直接编写。

Objective-C运行时尚未移植到Android。 它不应该是太多的工作,但仍然,如果没有语言的工作知识,我怀疑你将有一个轻松的时间移植它。

如果你选择用普通的C开发游戏(Android NDK和iPhone都支持),那么你想要做的事情对于通用应用程序来说会很困难,但游戏应该是可能的。 你必须编写一些粘合代码来将Obj-C和Java环境中的输入事件传递给你的C代码,但这不应该是一个很大的问题 – Objective-C允许你直接调用你的C代码并且有很多示例项目可以为Android做到这一点。

我自己还没有尝试过,或者还没有看过这个演讲,但是有一个关于在YouTube上使用Java开发iPhone应用程序的Google技术讲座看起来非常有前景。

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

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

有一些工具可以帮助您解决这个问题。 您可能想查看PhoneGap和Sencha Touch ,但还有更多。 请注意,此方法可能不适用于实时/animation密集型应用程序。

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

同样,他们用平台本地语言编写了他们的前端,并使用他们的跨平台库来获取核心逻辑和数据。

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

如果你可以等到今年晚些时候(确切的时间未知),Adobe将拥有AIR for Android和编译器到iPhone。 因此,您可以在AIR中为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。