javascript - 使用 JavaScript 构建 native 应用程序的最佳方式?

标签 javascript mobile cordova native

我玩phonegap有一段时间了, 在我的 Android 上做了一些测试...

还不错。

我的问题是:
使用 Web 客户端 (HTML/JavaScript/CSS) 开发 native 移动应用程序的最佳(您最喜欢的)框架是什么?

在多平台(iOS/Android/BlackBerry)中并行构建和维护这些应用程序有多容易? 它在不同平台(iOS/Android/BlackBerry)之间是否有很多异常(exception)?

开发 iOS 应用有哪些要求? 我需要一个带有特殊 SDK 的特殊 IDE 吗?我必须有 Mac 吗?

最佳答案

我们目前正在使用 React Native 构建原生 iOS 应用程序.如果它不包含在这里,那将是一种耻辱。

优点:

  • React 将 DOM 视为实现细节。这使得过渡到 native UI 变得非常自然。它还消除了编写 native 应用程序时对 HTML/CSS 的需求。您只需要用 JavaScript 编写的原生组件。
  • 原生组件!基本的 native 组件已经桥接到 JavaScript,并且有一个社区正忙于将其他一切都带过来。问题是,如果您知道或愿意学习一些 Objective C 或 Java,那么有一个 easy process将任何 native 模块(或第三方模块)添加到 React Native。
  • 快速迭代。自 3 月份开源以来,master 分支已经有超过 2600 次提交。
  • 您可以获得普通 React 的所有好处:虚拟 View 层、差异化、声明式 UI 创建、出色的开发人员体验以及一流的社区。
  • 您可以从同一个存储库为多个平台构建,重用大部分相同的代码库(主要是应用程序逻辑)。

缺点:

  • 它还很年轻。有一些功能需要 jimmy-rigging、第三方库或自定义 Objective-C/Java 才能运行。
  • 一些与 DOM 或浏览器 API 绑定(bind)的优秀第三方库仍然无法在 React Native 上运行,包括 React Router。
  • 最大的痛苦与 XCode 和 Apple 的开发者计划有关,但没有办法解决这个问题。

在多平台中构建和维护这些应用程序有多容易?

适用于 Android 的 React Native 于 2015 年 9 月 14 日开源。我还没有使用过它,但这是我到目前为止能够学到的东西。 2016 年 10 月 21 日更新:Windows 通用平台的 React Native 于今年早些时候发布。这意味着您现在可以使用 React Native 为 Windows 桌面、Windows 手机甚至 Xbox 构建应用程序!

React Native 不是旨在成为一次编写,随处运行的心态。他们采用一次学习,随处编写的范式。 iOS 是一个与 Android 截然不同的平台,因此需要为这两个平台的设计付出真诚的努力。 native API 也会有所不同。

因此,您最终将重新编写 native 组件和 API 的代码。但是,您的大部分应用程序逻辑都可以重复使用。事实上,React-Native 的组织方式使您可以将 Android 和 iOS 应用程序保存在同一个存储库中,这样您就可以在可能的情况下重复使用相同的代码。我认为这很棒,但只有时间会证明一切。 According to them ,到目前为止效果很好。

顺便说一下,Facebook 的一个团队 built an iOS app using React Native ,然后使用 87% 的相同代码库在三个月内转身构建了 Android 版本。

开发我的 iOS 应用有哪些要求?

目前,您需要一台 Mac 和 XCode 才能进行部署。目前解决这个问题的方法很少。根据this issue从 Slack 上的对话来看,一旦部署,您实际上可以从 Windows 或 Linux 机器上进行开发。 Facebook 还致力于开源其所有 Nuclide包裹,根据their presentation at F8 ,将包括无需 XCode 即可打包和构建的工具。

总的来说,React Native 是一种出色的体验。在我看来,它比目前的任何其他产品都要领先。社区内的感觉也非常积极。我只能假设它会随着时间的推移变得更好。

关于javascript - 使用 JavaScript 构建 native 应用程序的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19925486/

相关文章:

javascript - 如何在 jQuery 中按最近日期时间重新排列数据属性上的子 div?

javascript - 创建一个简单的 PDF 模式

javascript - 在 JavaScript 中以预定义的不规则间隔调用函数

android - Flex Hero Mobile,弹出 View 时共享数据

java - 发送图片到服务器

android - 在 Android 浏览器中压缩的背景图像

javascript - 为什么 iOS 上 Phonegap 中的新日期不返回任何内容?

javascript - 如何重置 bsDatepicker 输入?

javascript - Phone gap 中的 Angular http 返回错误,但在浏览器中成功

javascript - 使用 Phonegap 的离线自定义平铺 Google map ?