android - 关于跨平台项目中 Web 语言互操作性的问题

标签 android ios architecture cross-platform frontend

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

6年前关闭。




Improve this question




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

但是为了不必在每个应用程序上重写业务代码,我想尽可能多地重用代码。

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

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

此架构的目标是尊重重要的软件工程原则,例如 information hiding by decomposing requirements in modules , DRYSOLID

  • 每个功能将在模块中分解。
  • 核心 :业务逻辑代码 - 可在每个平台上重用 - 将以库的形式表示。
  • 查看 : View 类将在每个不同的平台上开发,以使用每个平台上提出的不同 UI 元素。例如:iOS 的 Objective-C/Swift 中 ViewController 的子类或用于操作 Web 应用程序 HTML 的简单类。 这门课没有逻辑。 它只负责:
  • 处理用户与业务逻辑的交互。
  • 显示业务逻辑中的内容
  • IView : 抽象操作 View 的类的接口(interface)。
  • 主持人 :Interactor 和 View 之间的链接以驱动 UI。
  • 互动者 : 模块的逻辑,比如算法。
  • 数据存储 :通过与数据库或 API 或 Web 服务通信来管理数据的持久性和获取。
  • 型号 :以结构表示的数据。

  • 此处适用于 iOS(Android 几乎相同):

    enter image description here

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

    这里是 AngularJS:

    https://docs.google.com/drawings/d/1NtdDfsr1yiuGOm_lfOY6Qab_kHb4I5b4sx7zeTAqwrE/pub?w=915&h=377

    现在您已经了解了有关架构的所有信息,以下是我的问题。

    我对网络语言没有足够的经验和反馈,无法做出明智的选择。经过一些研究,我发现有多种选择:
  • 飞镖 :
  • 问题一:是否存在允许通过 VM 在 Objective-C/Swift 和 Java 之间进行互操作的机制?我知道这两个平台都有 VM 来执行 Javascript 代码,而 Google 提供了 dart2js 来将 Dart 编译为 Javascript 代码。但这不是普通的 Javascript:参见示例 here .所以不知道还有没有正确 互操作性。
  • Javascript ES6:事件如果它还没有在浏览器中完全实现,可以通过 Traceur 开始使用 ES6编译器。
  • 问题2: Traceur 编译的 Javascript 和 iOS/Android 中的 VM 有互操作性吗?
  • 问题三:通过 Traceur 使用 ES6 开发大型项目并拥有生产代码是否“安全”?

  • 感谢您的阅读。

    最佳答案

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

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

    https://github.com/dropbox/djinni

    适用于 Android/iOS 的“ native ”应用示例:

    https://github.com/libmx3/mx3

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

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

    更新答案:

    如果您真的不想使用 C++ 并且可以接受非 native 带来的膨胀,那么您可以尝试以下操作:

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

    该项目是 Google 的 Cordova 分支,并添加了许多新功能和好处。

    这里有一个基于 Chrome API 的 Dart 包装器:

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

    基本上,您将使用纯 HTML5 技术在 Dart 中编写您的应用程序,然后对于某些事情您将使用 Chrome API(设备状态等)。然后你可以部署:

  • Web:在没有 Chrome API 功能的情况下编译为 JavaScript。
  • Chrome OS:使用 Chrome API 功能编译为 JavaScript。
  • Android:编译为 JavaScript,然后使用 MobileChromeApps 创建 Android 应用程序。
  • iOS:编译为 JavaScript,然后使用 MobileChromeApps 创建 iOS 应用程序。
  • 关于android - 关于跨平台项目中 Web 语言互操作性的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28223230/

    相关文章:

    java - AlertDialog 自动关闭

    javascript - 带路由器的Ember.js应用架构,如何避免方法重复

    ios - 如何强制用户停止输入 UITextField 但允许退格

    ios - 将另一个 ViewController 传递的值分配给字符串时出现问题

    android - 优步如何向司机发送新的乘车请求?

    android - 两个内容提供者访问同一个数据库

    java - 在某些设备上无法隐藏状态栏

    android - Webview Android 上的 TLS v1.2 支持

    android - ActionBarCompat : java. lang.IllegalStateException : You need to use a Theme. AppCompat

    ios - 在 iOS UIView Swift 中为展开的绘图设置动画