Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 关于跨平台项目中web语言互操作性的问题_Android_Ios_Architecture_Cross Platform_Frontend - Fatal编程技术网

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

Android 关于跨平台项目中web语言互操作性的问题,android,ios,architecture,cross-platform,frontend,Android,Ios,Architecture,Cross Platform,Frontend,我计划在iOS、Android和AngularJS上创建一个应用程序 但由于不必在每个应用程序上重写业务代码,我希望尽可能多地重用代码 为了能够在任何平台上执行项目的核心,我必须使用web语言 通过不同的文章,我规划了一个通用的体系结构,将项目的业务逻辑-核心-与UI分离,UI将为每个系统重新实现(iOS的UIKit、webapp的AngularJS和Polymer等) 该体系结构的目标是尊重重要的软件工程原则,例如,和 每个功能将在模块中分解 核心:业务逻辑代码——可在每个平台上重用——将以

我计划在iOS、Android和AngularJS上创建一个应用程序

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

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

通过不同的文章,我规划了一个通用的体系结构,将项目的业务逻辑-核心-与UI分离,UI将为每个系统重新实现(iOS的UIKit、webapp的AngularJS和Polymer等)

该体系结构的目标是尊重重要的软件工程原则,例如,和

  • 每个功能将在模块中分解
  • 核心:业务逻辑代码——可在每个平台上重用——将以库的形式表示
  • 视图:视图类将在每个不同的平台上开发,以使用每个平台上建议的不同UI元素。例如:Objective-C/Swift for iOS中ViewController的子类,或用于操作web应用程序HTML的简单类此类中没有逻辑。它只负责:
    • 处理与业务逻辑的用户交互
    • 显示业务逻辑中的内容
  • IView:抽象处理视图的类的接口
  • 演示者:交互者和视图之间的链接以驱动UI
  • 交互器:模块的逻辑,如算法
  • 数据存储:通过与数据库、API或web服务通信来管理数据的持久性和获取
  • 模型:以结构表示的数据
这里是iOS版(Android版几乎相同):

“核心”代码将通过虚拟机执行,如本文所示:

这里是AngularJS:


现在您已经了解了架构的所有内容,下面是我的问题

我在网络语言方面没有足够的经验和反馈,无法做出明智的选择。经过几次研究,我发现有多种选择:

  • 省道

    • 问题1:是否存在允许Objective-C/Swift和Java通过VM进行互操作的机制?我知道这两个平台都有VM来执行Javascript代码,Google提供了dart2js来将Dart编译成Javascript代码。但它不是简单的Javascript:请看一个例子。因此,我不知道是否仍然存在适当的互操作性
  • Javascript ES6:事件如果它还没有在浏览器中完全实现,那么可以开始使用带有编译器的ES6

    • 问题2:Traceur编译的Javascript与iOS/Android中的VM是否具有互操作性
    • 问题3:通过Traceur使用ES6开发大型项目并拥有生产代码是否“安全”

谢谢你的阅读。

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

C++到Java/Objective-C API生成器:

Android/iOS的“本机”应用程序示例:

关于该主题的有趣文章,包含更多链接:

更新答案:

<>如果你真的不想用C++,你可以从非本地获得的扩展,那么你可以尝试以下:

该项目是谷歌科尔多瓦的分支,增加了一系列新功能和好处

Chrome API上有一个省道包装器:

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

  • Web:编译为JavaScript而不使用ChromeAPI功能
  • Chrome OS:使用Chrome API功能编译为JavaScript
  • Android:编译成JavaScript,然后使用MobileCromeApps创建Android应用程序
  • iOS:编译为JavaScript,然后使用MobileCromeApps创建iOS应用程序

  • 这是一个有趣的话题。以下是我从“GWT.Create”会议中学到的,谷歌的人展示了他们是如何完成跨平台项目的:

    首先,图片中的数据存储和模型部分应该在外部服务器中完成,因此已经跨平台了

    UI呈现必须单独以本机方式完成,这是最好的解决方案

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


    他们还提到了C/Cpp解决方案,这并不是一个坏主意,Java只是一种高级语言,在大多数情况下易于使用。

    如果你想创建一个跨平台的应用程序(iOS/Android/Web),最好的办法就是在这些平台之间尽可能多地共享代码。你可以使用类似的东西,但这并不总是让人感觉很自然。事件最佳PhoneGap应用程序感觉不是本地的,因为它不使用本地UI。而是在本机UI容器中嵌入浏览器

    我建议使用以下项目结构:

    • myapp核心
    • myapp ios
    • myapp android
    • myapp网站
    核心项目在ios、android和web项目之间共享。您可以用Java编写核心项目,并使用将此代码转换为web项目的JavaScript。对于android项目,没有什么可做的,因为android