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

在iOS和Android之间共享代码的最佳方式,android,c++,ios,azure,cross-platform,Android,C++,Ios,Azure,Cross Platform,我为iOS和Android开发了一个应用程序,我正在寻找在这两个平台之间共享代码的最佳方式 我想做的是用本机创建所有视图(UI部分),但共享逻辑(控制器+模型)的代码 根据我所发现的,有三件事似乎相当不错: < > 1)C++使用逻辑C++构建库文件,这样我就可以在2个平台中使用.dll文件 2) Azure移动应用服务。有可能在Web服务中拥有所有逻辑吗?问题是,如果我不能上网,我的应用程序将是无与伦比的,对吗 3) 我听说很多关于Facebook使用的React native,但它似乎是用来

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

我想做的是用本机创建所有视图(UI部分),但共享逻辑(控制器+模型)的代码

根据我所发现的,有三件事似乎相当不错:

< > 1)C++使用逻辑C++构建库文件,这样我就可以在2个平台

中使用.dll文件 2) Azure移动应用服务。有可能在Web服务中拥有所有逻辑吗?问题是,如果我不能上网,我的应用程序将是无与伦比的,对吗

3) 我听说很多关于Facebook使用的React native,但它似乎是用来创建UI的,但我以前是用native创建的。我可以将react仅用于逻辑吗?

我认为将“核心”逻辑放入单独的库是一种明智的方法

你不是第一个想这么做的人,我强烈建议你看看。它是实现这一目标的工具。您可以定义通用接口和数据类型,并填写本机部分。这两种方式都可以交流


它不像一次编写整个内容那么简单,但它支持干净的设计,您可能会从中受益。

您似乎有三个选择:

1.C++
你不能仅仅拥有一个已编译的.dll,然后期望它能在iOS和Android上运行。它们都必须在不同的体系结构中编译,并且必须是iOS上的静态库

Dropbox就是这样做的,他们提供了很多注释和示例代码,以及您可以使用的代码

专业人士

•在您成功设置后,非常简单
•没有额外的依赖性、bug等层(如Xamarin/React Native)

缺点

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

2.沙马林
在这种情况下使用此选项似乎是极端的。你被迫使用C#并引入另一层依赖关系和bug。你说过你不想在UI中使用另一种语言,所以我不推荐使用它

3.自然反应
现在这是一个可行的选择。您可以用JS编写脚本,并在Android和iOS的本机代码中使用它们

不幸的是,它使用React Native for UI,但您可以

使用它有很多缺点,包括调用在另一个线程上执行时是异步的,因此必须为返回某些内容的函数实现某种回调系统

专业人士

•似乎易于设置和编写

缺点

•您必须为每个返回内容的函数实现本机回调
•使用it有很多缺点,文档描述了这些缺点:

•由于事件可以从任何地方发送,因此它们可以 将意大利面风格的依赖项添加到项目中

•事件共享名称空间,这意味着您可能会遇到某些名称 碰撞。碰撞不会被静态检测到,这是什么造成的 它们很难调试

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

结论

我想我会用C++来做,主要是因为一个大公司(Dropbox)尝试过它,并成功地在生产中使用它。你可以尝试将React Native作为一个实验,这将是一个很好的研究案例

看看xamarin,它可以让你用C#编写并为iOS和android生成应用程序。对我来说,反应式编程听起来像是软件工程的最新潮流。根据我自己的经验,反应式编程应用于甚至一半大的项目会导致无望、无法维护、无法调试的混乱。“有可能在Web服务中拥有所有逻辑吗?问题是,如果我没有访问internet的权限,我的应用程序将无法匹敌,对吗?”-你如何期望这个问题的答案不是“不,没有互联网你无法进入网络”?最后,如果你的目标是获得良好的用户体验,那么你无论如何都必须为每个平台创建不同的UI。根据你想要开发的应用程序类型,共享任何逻辑都是不值得的。在不知道应用程序的功能的情况下,很难推理。除此之外,你会有一个等式中的另一部分,根据我的经验,支持一个小的web服务器也不是一件小事。谢谢大家!我想我会尝试C++来开始QT使用C/C++来为Android和iOS开发提供相同的代码基础?最近我编写了一个轻量级的替代Djinni的代码。也许值得一看的是谁知道:)Djinni对它的描述有什么了不起的文章,介绍了Dropbox如何用C++ + Dropbox不再使用C++和Android和iOS之间不再共享的代码。