Appcelerator Titanium Mobile 如何工作?

Posted

技术标签:

【中文标题】Appcelerator Titanium Mobile 如何工作?【英文标题】:How Does Appcelerator Titanium Mobile Work? 【发布时间】:2011-01-27 11:46:53 【问题描述】:

我正在使用 Titanium Mobile 1.0 构建一个 iPhone 应用程序,我发现它可以编译为原生 iPhone 二进制文件。这是如何运作的?在没有像 280 North 的 Objective-J 和 Cappuccino 这样的超集语言的情况下,分析 javascript 代码并直接翻译成 Objective-C 似乎需要大量繁重的工作。

【问题讨论】:

它是开源的。你为什么不看看引擎盖下? @Gaby 我想如果我很好奇,那么其他人也很好奇,那么有什么比公开询问更好的方式来传播信息? @Darrell,我完全同意..我不是想抨击你,只是认为最快的路线(如果你需要细节)是直接检查代码..如果它出来了道歉错误的方式.. 小点:Objective-J是javascript的超集 我最近问了这个问题,并得到了一个更新的答案,其中包含本页答案中未描述的信息。这是问题:***.com/questions/19060554/… 【参考方案1】:

就像 jhaynie 说的,应用程序被编译成本地代码,但仍然有一个解释器来运行一些 javascript,这使得应用程序非常动态。

appcelerator titanium

【讨论】:

【参考方案2】:

Titanium 获取您的 Javascript 代码,对其进行分析和预处理,然后将其预编译成一组符号,这些符号将根据您的应用程序对 Titanium API 的使用进行解析。从这个符号层次结构中,我们可以构建一个映射到底层 Titanium 库符号的符号依赖矩阵,以了解您的应用程序需要哪些 API(以及相关的依赖关系、框架等)。我以半通用的方式使用符号这个词,因为它根据语言而有所不同。在 iPhone 中,符号映射到真正的 C 符号,最终映射到为 ARM/i386 架构编译的已编译 .o 文件。对于 Java,嗯,它或多或少是一个 .class 文件等。一旦前端可以理解您的依赖矩阵,我们然后调用 SDK 编译器(即 iPhone 的 GCC,android 的 Java),然后将您的应用程序编译成最终的本机二进制。

因此,一种简单的思考方式是,您的 JS 代码几乎是一对一地编译成本地的代表符号。仍然有一个解释器在解释模式下运行,否则动态代码之类的东西将无法工作。但是,它更快、更紧凑,并且尽可能接近纯原生映射。

显然,我们仍有很大的空间来改进这一点并继续努力。到目前为止,在我们最新的 1.0 测试中,它与相同的 Objective-c 直接代码几乎无法区分(因为在大多数情况下它完全映射到那个)。然而,从 CompSci 的角度来看,我们现在可以开始优化人类无法轻易做到的事情——就像今天的 GCC 编译器已经做的那样。

【讨论】:

哇,这听起来真的很棒。感谢您的澄清。我从没想过会在 AppCelerator 上投入这么多精力。继续努力! 我是否理解正确,没有发生 Javascript->Objective-C 和 Javascript->Java 转换,但这直接是本地代码?那么有没有办法查看创建的Objective-C或Java代码? 编译是否在 Titanium 的服务器上完成?我看到那个***en.wikipedia.org/wiki/Appcelerator_Titanium @djaqeel clojure,scala,jruby,nashorn【参考方案3】:

如果我打包我的简单代码,我会得到一个约 80MB 的 gzip 存档(原始代码约 1kB)。在包中——除其他外——你可以找到我的源 html 和 js 文件。 该软件包还附带了许多库(例如 ssl)(因为您可以在此框架内对很多东西进行低级访问)。

我认为他们会使用您的代码并包装某种解释器软件和库。 在我的情况下,如果我将我的 html 和 js 代码打包在一个只显示我的网站的小型浏览器旁边。

不过,只要代码在每个受支持的系统上都能以同样的方式运行,这就是一件好事。

【讨论】:

当我打开 Titanium 创建的 .ipa 文件时,我看到了一个标准编译的应用程序。找不到任何 HTML 或 JavaScript 代码。 我认为你描述的是 Cordova 所做的,但 Titanium 的工作方式不同 用一个小小的浏览器打包html和js代码……5年后electron诞生了。

以上是关于Appcelerator Titanium Mobile 如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Titanium appcelerator 进行游戏开发

iOS、Appcelerator Titanium 和外部附件框架

iOS LocationManager 未更新位置(Titanium Appcelerator 模块)

Appcelerator Titanium 中面向 OOP 的 CommonJS

如何在Android中使用Appcelerator Titanium构建Oauth 2.0

Appcelerator Titanium 中的自定义通知视图