在iOS和Android之间共享代码的最佳方式

时间:2016-05-05 09:52:28

标签: android c++ ios azure cross-platform

我开发了适用于iOS和Android的应用程序,而且我正在寻找在这两个平台之间共享代码的最佳方式。

我想要做的是以原生创建所有视图(UI部分),但共享逻辑代码(控制器+模型)。

在我发现的所有内容中,有3件事似乎相当不错:

1)C ++ - >使用c ++构建库文件对于逻辑,我将能够在2个平台中使用.dll文件

2)Azure移动应用服务。是否有可能成为网络服务中的所有逻辑?问题是,如果我没有访问互联网,我的应用程序将无法使用,对吧?

3)我听说过很多关于Facebook使用的React本机,但它似乎用于创建UI,但我更喜欢用原生的方式创建它。我可以只对逻辑做出反应吗?

2 个答案:

答案 0 :(得分:14)

看起来你有三个选择:

1。 C ++

你不能只有一个已编译的.dll,并期望它适用于iOS和Android。它们都必须在不同的体系结构中编译,并且必须是iOS上的静态库。

Dropbox以这种方式完成,他们已经提供了很多笔记和示例代码,以及您可以使用的代码,因此can take a look.

<强>赞成

•设置完毕后非常简单 •没有额外的依赖关系,错误等(如Xamarin / React Native)

<强>缺点

•设置和使用它需要大量的额外工作:您需要设置其他编译步骤并为两个平台编写包装器。
•尝试为两种不同的体系结构编译相同的代码时,您肯定会遇到的其他一些挑战

Here's a SO post on how to do it in detail...

2。 Xamarin

在这种情况下,此选项似乎极端使用。您被迫使用C#并引入另一层依赖项和错误。你说你不想为UI使用其他语言,所以我不推荐它。

3。 React Native

现在这是一个可行的选择。您可以在JS中编写脚本,并在Android和iOS中使用本机代码。

Here's an article on how to share code with code examples...

不幸的是,它使用React Native for UI,但您可以easily call React Native functions from native code.

使用它有很多不足之处,包括调用是异步的,因为它们是在另一个线程上执行的,所以你必须为返回某些东西的函数实现某种回调系统。

<强>赞成

•似乎易于设置和编写

<强>缺点

•您必须为每个返回内容的函数实现本机回调 •使用它有很多文件描述的垮台:

  

•事件可以从任何地方发送,他们可以介绍   意大利式风格的依赖项进入你的项目。

     

•事件共享命名空间,这意味着您可能会遇到某个名称   碰撞。什么使得碰撞不会被静态检测到   他们很难调试。

     

•如果您使用相同React Native组件的多个实例   你想区别于你的活动的角度,   您可能需要引入某种标识符并传递它们   以及事件(您可以使用本机视图的reactTag作为   标识符)。

结论

我想我会选择C ++,主要是因为一家大公司(Dropbox)尝试过并成功实际使用它。你可以试试React Native作为一个实验,它会成为一个很好的研究案例!

答案 1 :(得分:2)

我说要把#&#34;核心&#34;逻辑进入一个单独的库是一种明智的方法。

您不是第一个想要这样做的人,我强烈建议您查看Djinni。它是实现这一目标的工具。您可以定义公共接口和数据类型并填充本机部分。可以通过两种方式进行沟通。

它并不像一次性写出整个东西那么容易,但它支持干净的设计,无论如何都可以从中受益。