Appcelerator Titanium Mobile如何工作?


79

我正在使用Titanium Mobile 1.0构建iPhone应用程序,我发现它可以编译为本地iPhone二进制文件。这是如何运作的?似乎要分析JavaScript代码并直接转换为Objective-C,而没有像280 North's Objective-J和Cappuccino这样的超集语言,这将需要很多繁重的工作。


4
它是开源的。你为什么不找个底子?
加布里埃莱·彼得里奥里

17
@Gaby我想如果我很好奇,那么其他人也是如此吗?与公开询问相比,有什么更好的方法来传播信息?
Darrell Brogdon 2010年

2
@Darrell,我完全同意。我并不想打坏你,只是认为最快的路线(如果需要的细节)将是直接检查代码..道歉,如果它出来的错误的方式..
加布里埃尔Petrioli

1
小问题:Objective-J是javascript的超集
cobbal 2010年

2
我最近问了这个问题,并获得了最新的答案,而该信息未在此页面的答案中进行描述。问题来了:stackoverflow.com/questions/19060554/…–
英国电信

Answers:


147

Titanium会获取您的Javascript代码,对其进行分析和预处理,然后将其预编译为一组符号,这些符号将根据您的应用程序使用Titanium API进行解析。从这个符号层次结构中,我们可以构建一个符号依赖关系矩阵,该矩阵映射到基础的Titanium库符号,以了解您的应用特别需要哪些API(以及相关的依赖关系,框架等)。我以半一般的方式使用“符号”一词,因为它在语言上有所不同。在iPhone中,该符号映射到一个真正的C符号,该符号最终映射到一个已针对ARM / i386体系结构进行编译的.o文件。对于Java来说,它或多或少是一个.class文件,等等。一旦前端可以理解您的依赖关系矩阵,我们便会调用SDK编译器(例如,iPhone的GCC,

因此,一种简单的思考方式是,您的JS代码几乎一对一地编译为本地的代表性符号。仍然有一个解释器以解释模式运行,否则动态代码之类的东西将无法工作。但是,它更快,更紧凑,并且几乎与纯本地映射差不多。

显然,我们仍然有足够的空间来改进此问题并进行处理。到目前为止,在我们最新的1.0测试中,它与相同的Objective-C直接代码几乎没有区别(因为在大多数情况下,它都已精确地映射到该代码)。从CompSci的角度来看,我们现在可以开始优化人类确实不容易做到的事情-就像今天的GCC编译器一样。


哇,听起来真的很棒。感谢您的澄清。我从未想到AppCelerator会付出如此多的努力。继续努力!
MrMage 2010年

12
我是否正确,没有进行Javascript-> Objective-C和Javascript-> Java转换,但这直接转换为本机代码?因此,没有办法看看创建的Objective-C或Java代码吗?
janpio 2010年

1
编译是否在Titanium的服务器上完成?我看到Wikipedia en.wikipedia.org/wiki/Appcelerator_Titanium
adib 2011年

1
@djaqeel clojure,scala,jruby,nashorn
gtrak

3

就像jhaynie所说的那样,该应用程序被编译为本地代码,但是仍然有一个解释器可以运行一些javascript,这使得该应用程序非常动态。

钛制促进剂


1

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

我认为他们采用您的代码并包装了某种解释器软件和库。就我而言,这就像将我的html和js代码打包到仅显示我的网站的微型浏览器旁边一样。

但是,只要代码可以在每个受支持的系统上以相同的方式工作,那就太好了。


4
当我打开Titanium创建的.ipa时,我看到似乎是一个标准的已编译应用程序。没有HTML或JavaScript代码。
Darrell Brogdon

1
我认为您描述的是Cordova的功能,但是Titanium的工作方式有所不同
Rohit Chatterjee

用一个很小的浏览器包装html和js代码... 5年后电子诞生了。
Caio Iglesias
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.