【问题标题】:Sharing code between iOS & Android projects在 iOS 和 Android 项目之间共享代码
【发布时间】:2011-05-02 14:38:34
【问题描述】:

我受雇为我的雇主创建的网络服务开发移动框架。理想情况下,管理层希望拥有一些可以跨移动平台共享的可重用组件(最初是 iOS 和 Android,以后可能是 Windows Phone 7)。

我一直想知道这有多可行。其中一个要求是原生界面,因此我们将在 iOS 上使用 Cocoa Touch 以及任何(基于 Java 的)工具集来为 Android 创建原生 UI。该应用程序将与 web 服务交互,主要是我们在内部创建的那些。 Web 服务是在 .NET 中开发的。

就可重用组件而言,我想我们可以使用一些 C++ 代码来进行 Web 服务调用,甚至可能更多地用于应用程序的后端,但我想知道这是否是一个好方法。 Apple 的 Foundation Framework 内置了一些出色的功能来访问 Web 服务,更不用说其他开源库,例如ASIHttpRequest、SBJSON 等……我想 Android 也是如此(尽管我目前还没有真正的 Android 经验)。此外,在查看 Google、Twitter 和 Facebook 等公司完成的项目时,这些公司中的每一个都提供为主要移动操作系统平台构建的本地库。如果大公司采取这种做法,我们也顺理成章。

也许我们应该更多地关注我们应该跨平台提供的通用架构,而不是可以共享的实现。

有没有人建议我们使用 C/C++ 为我们的 web 服务的移动站点开发这样一个框架(共享库)?如果有,为什么?

【问题讨论】:

  • 有点迷茫,你想分享哪一个? Web 服务将有一个标准,比如 SOAP。然后客户端可以实现对该 Web 服务的调用,您可以查看 AXIS2 for java(用于 android),不确定 iOS,但可能有类似的东西。
  • 这是关于在移动客户端上运行的代码,最好是移动设备用户界面“背后”的大部分代码。

标签: android web-services ios mobile


【解决方案1】:

这实际上取决于您想要拥有什么级别的自定义代码。我之前在一家游戏公司工作,我们为 iPhone 和 Android 制作了两款游戏,至少 90% 的代码库在两个平台之间以 c++ 代码共享。有时使用专门的第三方库(如 Facebook 等)实现元素要容易得多,但维护该代码意味着在两个平台上不断地这样做。这就是为什么我们甚至用 C++ 为我们的游戏实现自己的 UI 对象的原因之一。因为即使使用 Interface Builder 和 Android 的 XML 进行初始设置会更容易,但由于我们使用了共享代码库,因此所需的维护和调整最终会大大减少。

简而言之,我强烈建议使用 C/C++ 编写任何共享的自定义代码,以及在其本机代码库(android 的 java 或 iphone 的 obj-c)中容易得多的东西,而且你不希望改变很多,要分开。

【讨论】:

  • 是的,我一直在思考这方面的问题,对于游戏来说这似乎是非常有效的,但是我不禁怀疑这对于信息应用来说是不是一种有效的方法。不过谢谢你的回答,给了我一些思考。
  • 是的,游戏和信息应用在编码时肯定有不同的考虑点。我试图帮助解决的真正问题是,您不仅需要考虑实施,还需要考虑维护。
【解决方案2】:

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

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

我会告诉你,即使在桌面环境中,它也比在 .net 或 java 中更难做到,而且之所以这样做,是因为它是已经用 C/C++ 编写的更大应用程序的一部分。

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

【讨论】:

  • 是的,我们正在考虑使用 JSON 格式的 RESTful Web 服务。我发现了一些支持此功能的 C++ 库,但通常不清楚这些库在 iOS 和 Android 上的支持程度。
  • 通常依赖不多的基于 Linux 的库不难移植到它们,因为它们的基础相似,但您必须进行测试。我已经在 iOS 中编译并使用了一些库,没有问题。想着,从未有过类似的 Android 体验。
  • 我想我会尝试为 iPhone 和 Android 创建一个演示应用程序,它调用 Web 服务并使用共享库进行 Web 服务调用,看看它是如何工作的。我知道 Android 使用(非标准)boost 库,我可以想象这可能会带来一些问题。
  • 还要小心 C++ 库执行整个 RESTful 的事情,它们可能会放弃灵活性。对于我的应用,我发现使用 http+xml 库更好,只是因为我拥有更细粒度的控制。
猜你喜欢
  • 2018-01-31
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多