写点什么

用 NativeScript 创建 JavaScript 原生移动应用

2015 年 3 月 10 日

Telerik 公开了用于创建安卓、iOS 和 Windows Universal 跨平台原生应用的框架, NativeScript 的公共访问权限。

NativeScript 既不是一种新型的 JavaScript 语言,也不是原生功能的封装器,它包括一个 JavaScript 运行时环境和一种将 JavaScript 调用转化为原生调用的机制。用 JavaScript(或 TypeScript,CoffeeScript 等)语言编写应用,之后在安卓平台用 V8,在 iOS 和 Windows Phone 上用 WebKit JavaScriptCore 解释应用。然后,NativeScript 运行时环境找到原生的目标 API,将 JS 数据类型转化为相应的原生类型,然后调用原生 API,并将得到的结果值返回,具体流程如下图所示

举例来说,在安卓平台上创建文件对象 var file = new java.io.File(path); 的步骤如下:

  • 用 V8 解释代码
  • 根据原数据确定相应的原生方法调用。原数据是在各个平台上预先构建的提供类型和方法签名的全部可用 API 集合。
  • 类型转换模块将 JavaScript 的 String 类型转换为一个 java.lang.String 对象
  • 运行时环境为 java.io.File 创建一个代理对象
  • 通过该代理将对原有 JS File 对象的调用委托给相应的 Java 实例

据Telerik 介绍,与纯原生代码相比NativeScript 运行时环境会带来大概10% 的性能损失。

NativeScript 可以将其所支持平台上的任意原生 API 作为目标,包括传感器接口 API 和用 Objective C,Java 或.NET 编写的第三方库。UI 组件是原生的,UI 事件由在 JavaScript 代码中声明的原生处理程序处理,如 View.OnClickListener UIControl.addTarget

为了避免开发者需要对三个支持的平台有深入的理解,该框架包含了一个抽象与原生代码连接的 NativeScript 模块层( NativeScript Modules Layer ,NML),可以自动将 JavaScript 调用转化为原生调用。NML 包含如下模块:Application,Camera,Color,Console,Data,File System,HTTP,Imaging,Local Settings,Location,Timer,UI。开发者并未受限于只能使用 NML,也可以访问任意原生 API。

NativeScript 其它一些功能简单列示如下:

  • 当前支持平台:iOS7+,安卓 4.2+。预计将在4 月实现 Windows Phone 的支持。对安卓早期版本的支持也将很快到来。
  • iOS 平台的编译可以在远程完成,无需 Mac 电脑或 iOS 工具
  • 开发工作可以在任意 IDE 中完成。
  • 支持任意跨浏览器的 JavaScript 库。
  • 支持 CSS。
  • 支持 MVVM。
  • 即时支持新的原生平台。

NativeScript 是一个基于 Apache 2.0 许可的 Github 开源项目

查看英文原文: Creating Mobile Native Apps in JavaScript with NativeScript

2015 年 3 月 10 日 03:348575
用户头像

发布了 75 篇内容, 共 58.4 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

工厂模式(四)泛型工厂之MyBatis Mapper代理

LSJ

Java 设计模式 泛型 工厂注册中心

钢铁侠马斯克之仰望星空

池建强

创业 马斯克 Space X

John 易筋 ARTS打卡Week 02

John(易筋)

ARTS 打卡计划 ARTS活动 arts

MAC OS 下 HomeBrew 使用

耳东

macos brew homebrew

Apache DolphinScheduler新特性与Roadmap路线

海豚调度

数据中台 大数据任务调度 工作流调度 海豚调度 数据湖调度

B端产品经理养成记(2):用户故事

涛哥

产品经理 需求 产品开发

ARTS打卡第一周5.25-5.31

我笔盒呢

ARTS打卡Week 02

teoking

objective-c LeetCode WebRTC

ARTS week 2

刘昱

愚蠢写作术(1):怎么让你的标题被读者忽视

史方远

个人成长 写作

ARTS Week1

姜海天

【5月】本月读书学到了什么

Neco.W

创业 读书感悟 阅读量

如何用CSS选择符(数字开头) 杀死队友

学习委员

Java html css3 前端 Web

B端产品经理养成记(1):业务场景

涛哥

产品经理 需求 产品开发

不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...

JackTian

GitHub 学习 程序员 编码 开源项目

Kafka系列9:面试题是否有必要深入了解其背后的原理?我觉得应该刨根究底(上)

z小赵

大数据 kafka 实时计算

写博客的那些事

shengjk1

Element-UI实战系列:Table+Pagination组件实现已选和全选功能

brave heart

Vue 前端 Element

【ARTS打卡】Week01

Rex

学习

做PO难,难于上青天

刘华Kenneth

敏捷 产品经理 决策 PO

RocketMQ - 高可用设计

Java收录阁

RocketMQ

游戏夜读 | 关于构图的困难

game1night

时代在变,产品运营能力很重要

夜来妖

程序员人生 程序人生 产品经理 产品推荐 程序媛

转行程序员浅谈进程间的socket通信

WB

Linux socket 转行程序员

1 ARTS 2020-05-31

3.141516

LeetCode

工作 vs 生活

shengjk1

【openlayers】在vue中使用ol

学习委员

Java html Vue 地图 openlayers

你会写测试用例吗

鱼贩

ARTS week2

紫枫

ARTS 打卡计划

使用Kotlin语言初始化数组

mengxn

数组 kotlin 初始化

ARTS(2020-05-25/2020-05-31)

天行者

正确阅读

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

用NativeScript创建JavaScript原生移动应用-InfoQ