在iOS和Android项目之间共享代码

问题描述:

我被聘为开发由我的雇主创建的web服务的移动框架。理想情况下,管理层希望拥有一些可在移动平台上共享的可重用组件(最初iOS iOS & Android,可能稍后会提供Windows Phone 7)。在iOS和Android项目之间共享代码

我一直在想这是多么可行。其中一个要求是本机界面,所以我们会在iOS &上使用Cocoa Touch,无论使用哪种(基于Java的)工具集来为Android创建本机UI。该应用程序将与Web服务进行交互,主要是我们在内部创建的Web服务。 Web服务已经在.NET中开发。就可重用组件而言,我想我们可以使用一些C++代码来进行web服务调用,甚至更多的应用程序的后端,但我不知道这是否是一个好方法。 Apple的Foundation Framework内置一些优秀的访问Web服务的功能,更不用说其他的开源库了,例如ASIHttpRequest,SBJSON等等......我想Android也是如此(尽管我现在没有真正的Android体验)。此外,在查看Google,Twitter等公司完成的项目时,这些公司都提供了为主流移动操作系统平台构建的本地库。如果大公司采取这种方法,我们仿效这种做法是合理的。

也许我们应该更多地关注我们应该跨平台提供的一般体系结构,而不是可以共享的实现。

有人会建议我们利用C/C++为我们的webservices的移动网站开发这样一个框架(共享库)吗?如果是这样,为什么?

+0

有点困惑,你想分享哪一点?一个Web服务将会有一个标准,比如SOAP。然后,客户端可以实现对该Web服务的调用,您可以查看AXIS2 for java(对于Android),不确定iOS,但可能有类似的东西。 – ColWhi 2011-05-02 14:48:02

+0

这是关于在移动客户端上运行的代码,最好是移动设备的用户界面后面的大部分代码。 – 2011-05-02 14:50:32

根据您使用的WS协议可能或多或少难以做到,但无论如何,我发现在C/C++中为移动平台做这些工作几乎没有什么优势。 如果您使用SOAP,我甚至不会考虑C/C++,即使是桌面应用程序。我已经使用了C++的SOAP库,并且它们比Java/.net的对象更难使用,并且它们的实现方式(将SOAP对象映射到C结构)在格式更改时很容易崩溃。更不用说,当WSDL发生变化时,您必须重新编译您的客户端。

正如我理解你的情况,你打算使用REST。我从来没有为C/C++找到一个好的REST库,但是最近我做了一个桌面项目,其中我使用WinHTTP(在Windows中)和libCURL(在Linux中)实现了一个C++ REST客户端。当然,他们只提供HTTP部分,所以我必须添加用于XML解析的cppdom。如果你使用JSON,有很多好的库,比如jsoncpp,libjson。

我会告诉你,即使在桌面环境下,它的操作也比以前要困难得多。net或java,并且只是这样做的,因为它是已经用C/C++编写的较大应用程序的一部分。

无论如何,你会有更多的工作,没有太多的优势,因为所有这些现代移动平台都提供了丰富的库,可以做同样的事情,并且API的用户可能会用平台的主要语言进行开发,所以你会有实现WS访问代码和绑定代码的额外工作。正如我假设你的所有逻辑(或至少大部分)都在你的服务器中,而不是客户端,所以平台之间没有太多的通用代码来证明使用C/C++的合理性。

+0

是的,我们正在考虑使用JSON格式的RESTful Web服务。我发现了一些支持这个的C++库,但是我们不清楚这些库在iOS和Android上的支持情况如何。 – 2011-05-02 15:02:27

+0

通常,基于Linux的库并没有太多的依赖关系,因为它们的基础是相似的,所以你不得不测试。我已经编译并在iOS中使用了一些库,没有任何问题。心想,从未有过类似的Android体验。 – 2011-05-02 15:11:11

+0

我想我会尝试为iPhone和Android创建一个演示应用程序,该应用程序调用Web服务并使用Web服务调用的共享库,查看它是如何工作的。我知道Android使用(非标准)提升库,我可以想象这可能会给一些问题。 – 2011-05-02 15:13:42

这真的取决于你想要的自定义代码级别。之前我曾在一家游戏公司工作过,我们为iPhone和Android制作了两款游戏,并且至少有90%的代码是由C++代码在两个平台之间共享的。有时候使用专门的第三方库(如Facebook等)来实现元素要容易得多,但维护这些代码意味着要在两个平台上继续这样做。这就是我们甚至为我们的游戏在C++中实现自己的用户界面对象的原因之一。因为尽管使用Interface Builder和Android的XML进行初始设置会更容易,但由于我们使用了共享代码库,所以维护和调整所需的时间明显减少了。

总之,我会强烈建议写在C/C++的任何共享自定义代码,事情是在他们的原生代码库显著容易(Java进行Android或OBJ-C为iPhone),你不要指望变化很大,保持分开。

+0

是的,我一直在考虑这方面,对于看起来很有效的游戏,但我不禁想知道这是否是一种有效的信息应用方法。感谢你的回答,但给我一些想法。 – 2011-05-02 14:52:35

+1

是的,游戏和信息应用程序在编码时肯定有不同的要点。我试图帮助的真正的一点是,您不仅需要考虑实施,还需要考虑维护。 – 2011-05-02 14:54:28