首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于跨平台项目中web语言互操作性的问题

关于跨平台项目中web语言互操作性的问题
EN

Stack Overflow用户
提问于 2015-01-29 19:43:54
回答 3查看 436关注 0票数 5

我计划在iOS、安卓和AngularJS网站上创建一个应用程序。

但是,由于不必在每个应用程序上重写业务代码,我希望尽可能多地重用代码。

为了能够在任何平台上执行项目的核心,我必须使用web语言。

通过不同的文章,我计划了一个共同的体系结构来将项目的业务逻辑--核心--与UI分开,用户界面将为每个系统重新实现(UIKit表示iOS,AngularJS和高分子,用于webapp等等)。

该体系结构的目标是尊重重要的软件工程原则,如通过分解模块中的需求来隐藏信息干的实心

  • 每个特征将在模块中被分解。
  • Core:在每个平台上可重用的业务逻辑代码将以库的形式表示。
  • 视图:将在每个不同的平台上开发视图类,以使用每个平台上提出的不同UI元素。例如:Objective/ Swift中ViewController的子类iOS,或者一个简单的类来操作web应用程序的HTML。这个类中没有逻辑。它只负责:
    • 处理业务逻辑的用户交互。
    • 显示业务逻辑中的内容

  • IView:抽象操纵视图的类的接口。
  • 演示程序:在交互程序和视图之间的链接,以驱动UI。
  • 交互器:模块的逻辑,如算法。
  • database :通过与数据库或API或web服务通信来管理数据的持久性和获取。
  • 模型:以结构表示的数据。

for iOS (安卓几乎相同):

如本文所示,"core“的代码将通过虚拟机执行:http://www.skyscanner.net/blogs/developing-mobile-cross-platform-library-part-3-javascript

这里为AngularJS:

现在你已经知道了关于建筑的一切,下面是我的问题。

我在网络上没有足够的经验和反馈,无法做出明智的选择。经过很少的研究,我发现有各种各样的选择:

  • Dart
代码语言:javascript
复制
- **Question 1:** Are there mechanisms to allow interoperability between Objective-C/Swift and Java through VM? I know that both platforms have VM to execute Javascript code and Google provides dart2js to compile Dart to Javascript code. But it's not plain Javascript: See an example [here](http://pastebin.com/25P8ugnS). So I don't know if there is still a **proper** interoperability.

  • Javascript ES6:事件--如果它还没有在浏览器中完全实现,就可以开始使用ES6和示踪剂编译器。
代码语言:javascript
复制
- **Question 2:** Is there interoperability of Javascript compiled by Traceur and the VM in iOS/Android?
- **Question 3:** Is it "safe" to use ES6 through Traceur to develop a large-scale project and have production code?

感谢您的阅读。

EN

回答 3

Stack Overflow用户

发布于 2015-01-29 21:45:07

我知道这不是你列出的选项之一,但不要自动排除C++。这就是Dropbox所使用的--例如,他们甚至为此目的开放了他们的工具:

C++到Java/Objective生成器:

https://github.com/dropbox/djinni

Android/iOS的“原生”应用程序示例:

https://github.com/libmx3/mx3

有更多链接的关于这个主题的有趣文章:

http://oleb.net/blog/2014/05/how-dropbox-uses-cplusplus-cross-platform-development/

最新答案:

如果您真的不想使用C++,并且对非本地化的膨胀没有意见,那么您可以尝试以下方法:

https://github.com/MobileChromeApps/mobile-chrome-apps

该项目是谷歌的交叉科多瓦,并增加了一系列新的功能和好处。

在Chrome上有一个Dart包装器:

https://github.com/dart-gde/chrome.dart

基本上,您可以使用普通的HTML5技术在Dart中编写应用程序,然后在某些情况下使用Chrome (设备状态等)。然后,您可以部署:

  • 网络:没有Chrome特性的编译为JavaScript。
  • Chrome :使用Chrome特性编译为JavaScript。
  • Android:编译为JavaScript,然后使用MobileChromeApps创建安卓应用程序。
  • iOS:编译为JavaScript,然后使用MobileChromeApps创建iOS应用程序。
票数 2
EN

Stack Overflow用户

发布于 2015-02-07 20:03:37

这是一个有趣的话题。下面是我从"GWT.Create“会议上学到的,谷歌的家伙们展示了他们是如何做跨平台项目的:

首先,图片中的DataStore和Model部件应该在外部服务器中完成,因此它已经跨平台了。

UI呈现必须以单独的本地方式进行,这是最好的解决方案。

他们用Java实现了共享逻辑(复杂的计算、加密等),对于Android,它是开箱即用的,对于Web,他们使用GWT将Java转换成Javascript,对于iOS,他们使用J2ObjC,这是一种新的谷歌产品。你可以在这里找到它:

https://github.com/google/j2objc

他们还提到了C/Cpp解决方案,它一点也不坏,Java只是一种高级语言,在大多数情况下很容易使用。

票数 1
EN

Stack Overflow用户

发布于 2015-02-08 14:10:46

如果您想要创建跨平台应用程序(iOS/Android/Web),最好的方法就是在这些平台之间共享尽可能多的代码。您可以使用类似于PhoneGap/Cordova的东西,但这并不总是很自然的。事件最好的PhoneGap应用程序感觉不是那么原生,因为它不使用本机UI。相反,将浏览器嵌入到本机UI容器中。

我建议使用的项目结构如下:

  • myapp-core
  • myapp-ios
  • myapp-android
  • myapp-web

核心项目由ios、android和web项目共享。您可以用Java编写核心项目,并使用GWT将这些代码转换为web项目的JavaScript。对于android项目,没有什么可做的,因为Android使用Java。对于ios项目,可以使用J2Objc将核心Java代码转换为Objective。

核心项目是什么?

尽可能多地使用接口和抽象基类以及工厂。

对话、提醒和联系人也处理网络管理和离线同步的困难任务,在这种情况下,应用程序被脱机使用,提醒被发出,电子邮件被发送。这取决于应用程序存储所有这些,并在时机成熟时将其发送到互联网上。来源 当然,收件箱有许多元素是跨三个平台共享的:管理网络通信的代码、缓存对象、本地持久存储、本地和远程管理用户编辑,以及脱机时支持所有这些内容。必须忠实和正确地实现这一逻辑,并在所有三个客户端上保持最新。用三种不同的语言重写它三次,将占用大量的工程资源,并减慢我们改进收件箱的速度。 对于iOS,我们开发了现在开放源码的J2ObjC交叉编译器,将我们的J2ObjC数据模型转换为Objective,然后再一次获得一个自然的API,在此基础上构建我们的本地iOS收件箱应用程序(完全带有-Reminder snooze)。精明的读者可能想知道,当我们将垃圾收集语言(Java)转换为参考计数语言(Objective)时,如何处理阻抗不匹配的问题。通常,J2ObjC依赖于objects自动释放池,因此通常垃圾收集的对象会在池耗尽时释放。这种方法的一个问题是引用周期;在Java数据模型中存在循环的地方,我们使用Java注释来标识@WeakReference。在转涂时,目标C中相应的性质将有__weak修饰符,从而打破了保留周期。在实践中,我们发现这是一个相对较小的问题,我们进行了自动化测试,这些测试标志着新周期潜入对象模型的罕见情况。来源

您的核心模块之间的通信可以通过运行在Android/iOS/GWT上的Dagger2来完成。还有一个名为实时-json的跨平台JSON库。HTTP传输可以在核心部分实现,至少对Android和iOS是这样的。在GWT/JavaScript中,您必须在客户端执行此操作。

下面是一些示例应用程序,应该对您有所帮助:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28223230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档