返回博客首页
← 所有文章

更多 NativeScript 问题解答

2015 年 9 月 16 日 - 由 John Bristowe

What is 'NativeScript'?

在过去几周里,我们的团队一直在各种活动中忙碌,并与世界各地的开发者讨论 NativeScript。我们从开发者那里收到了很多关于 NativeScript 的问题,我认为在这里回答一些常见的问题会很有帮助。

你们的 JavaScript 虚拟机到底是用什么语言编写的?具体来说,你们在应用程序包中发布的虚拟机。它与 V8/WebKit 之间有什么区别吗?

用于 NativeScript 的 Android 运行时 是用 C++ 编写的。查看 NativeScript for Android 简介,了解其架构概述。用于 NativeScript 的 iOS 运行时 是用 C++ 编写的。有关 NativeScript 的更多信息 - 包括有关这两个运行时的信息 - 请务必查看文章 NativeScript - 技术概述

NativeScript 伴侣应用程序是用什么语言编写的?外壳是如何运行一个真正的原生应用程序的?

用于 iOS 的 NativeScript 伴侣应用程序 是用 Objective-C 编写的。用于 Android 的 NativeScript 伴侣应用程序 是用 Java 编写的。在这两种情况下,伴侣应用程序在应用程序包部署到设备时托管应用程序包。

NativeScript 会在部署之前编译我的 JavaScript 代码吗?

不会。它通过每个平台(例如 Android 和 iOS)上的 VM 执行。

如果我们有一个运行 NativeScript 应用程序的外壳,为什么我们不能让它在浏览器模拟器中工作?或者,这是 Telerik 平台落后的情况吗?

Screen BuilderAppBuilder 网页客户端的设备模拟器在浏览器中运行。因此,它们仅限于浏览器提供的沙盒环境的功能。当您使用 Screen Builder 为 NativeScript 构建应用程序时,我们通过 Kendo UI 生成原生界面的近似值。我们的目的是提供一种体验,尽可能地模拟原生 UI,因为它可以在网络上呈现。我们的目标是让您使用我们的工具构建原生应用程序,这些工具将利用原生 UI 控件,一旦在原生模拟器或设备上运行。

如果您希望在浏览器中模拟 作为原生应用程序 的 NativeScript 应用程序,请查看 Appetize。它有点滞后,但效果很好。

展望未来,Telerik 平台工具对 NativeScript 的支持将落后于命令行界面(CLI)多远?

npm-nativescript-maps

好问题。NativeScript 1.3 现在通过 npm 支持插件和依赖项。这一改变使我们的工具能够运行 NativeScript 的“最新版本”。我们计划在 10 月份将此功能集成到 AppBuilder 中。最终结果意味着我们的工具将与 NativeScript CLI 一致,这太棒了(如果我这么说的话)。

NativeScript 的性能与 Titanium 和 React Native 等其他框架相比如何?你们在任何地方发布了性能基准测试吗?

我们已经进行了大量的测试,发现 NativeScript 的性能与其他框架相比非常好。我们计划很快写更多关于性能的文章。在此期间,Mihail Slavchev 在以下文章中写了一些关于 NativeScript 性能的内容。

为什么侧边抽屉没有在页面 用户界面小部件 上列出?它何时会在 Telerik 平台上可用?

侧边抽屉Telerik UI for NativeScript 的一部分,而不是 NativeScript 附带的核心 UI 小部件。我们尚未宣布 侧边抽屉 与 Telerik 平台的发布日期。

NativeScript 在 iOS 上的调试与 Android 上的调试之间有什么区别吗?我们是否拥有使用 TypeScript 的调试故事?

是的,有一些区别。但也有一些相似之处。例如,您可以使用 tns debug 命令通过 CLI 调试应用程序。Android 和 iOS 的运行时都通过 ConsoleTrace 模块提供诊断信息。(有关 NativeScript 中跟踪的更多信息,请查看 跟踪 NativeScript 应用程序。)也就是说,通过工具调试应用程序确实在功能方面有所不同。请查看以下文章,以获取有关可用调试选项的更多信息。

如何将原生库与 NativeScript 应用程序一起使用?

您可以通过 NativeScript CLI 的 plugin 命令使用原生库。

$ tns plugin add <Plugin>

 

值得一提的是,NativeScript 支持 CocoaPods。我们有一篇题为 使用 CocoaPods 的文章,它将引导您完成通过指定一个 Podfile 来集成它们的流程,以作为 CLI 的一部分进行集成。对于 Android,您可以通过 CLI 将 JAR 库集成到 NativeScript 应用程序中

最后,我应该提一下,我们计划为您提供一种通过我们即将发布的 经过验证的插件市场 添加原生库的功能。该网站可以让您快速轻松地添加库,并提供支持文档和屏幕截图。有关更多信息,请查看 Kiril Stanoev 关于 NativeScript 经过验证的插件市场 的博客文章。

我们有适用于相应平台的 CocoaPods 和 JAR 集成,但这些集成在 NativeScript 中是跨平台的吗?

不会。这些是将原生库与 Android 和 iOS 集成的技术。因此,它们只与相应的平台集成。

是否有任何指导意见,可以使 GenyMotion 或 Visual Studio 的 Android 模拟器与 NativeScript 项目一起使用?

NativeScript CLI 支持 Genymotion

$ tns emulate android --geny <GenyName>

 

请注意,您需要满足一些先决条件才能使其正常工作。

NativeScript CLI 与 Visual Studio 的 Android 模拟器 一起使用。模拟器运行后,执行以下命令。

$ tns device

 

这将提供可用部署目标的列表,其中将包括 Visual Studio 中运行的 Android 模拟器。从那里,您可以通过以下命令运行 NativeScript 应用程序。

$ tns run android --device <IP Address>:<Port>

 

您也可以通过 tns livesync --watch 使用 LiveSync 来实现相同的结果。

我们什么时候会有 NativeScript 的完整 LiveSync 故事?

NativeScript 1.2 中包含对 LiveSync 的支持。我们希望在未来的版本中改进体验。目前,正在讨论对 NativeScript 1.4 时间框架的一些改进

如果整个 UI 可视化树是在代码中构建的,而不是在标记中构建的,是否会存在性能损失?

不会。事实上,恰恰相反;从标记中构建 UI 时,存在轻微的性能损失。但是,这微不足道,而且在大多数情况下,这只是一次性成本。无论如何,我们支持使用代码和标记创建 UI,因此请使用您喜欢的任何方式。

我们如何创建可重复使用的标记作为 UI 渲染的模板?

最简单的方法是通过一个外部片段,您将其包含在您的页面中。假设以下 XML 片段位于一个名为 main-view-layout.xml 的文件中。

<StackLayout xmlns="http://schemas.nativescript.org/tns.xsd">
  <Label text="Hello, NativeScript!" />
</StackLayout>

 

我可以通过以下方式将此片段用作模板,将其包含在其他地方(例如 main-page.xml)中。

<Page xmlns="http://www.nativescript.org/tns.xsd" xmlns:myFragment=".">
  <myFragment:main-view-layout />
</Page>

 

我非常喜欢这种方法,因为您可以将应用程序的标记分成可重复使用的部分。

NativeScript 是否计划支持 Windows 10 或通用 Windows 平台 (UMP)?

是的。我们已经决定跳过 Windows Phone 8/8.1,并将重点放在支持 Windows 10 上。我们尚未宣布此支持何时准备就绪。但是,我们有一个关于 此问题的 GitHub 问题,您可以关注它。

将来是否会选择通过 Less 对 UI 进行样式设置?

您现在可以使用 Less。但是,您必须自己调用解析器。我建议您为此使用 grunt 等工具。目前,我们正在研究 将转译器作为 NativeScript CLI 的一部分进行支持。这项工作的一个指导原则是使这种支持通用化,从而包含任何转译器。这包括用于 CSS 的 Less/Sass