Titanium入门开发问题

目前只在mac机器上安装了开发环境,因为之前有用mac机进行android开发,已经安装好了JDK,也下载安装好了android-SDK,只是注册下载安装了Titanium_studio。
(在ubuntu上也有安装,不过因为ubuntu版本太低为8.0.4安装后无法启动,需要升级一些组件,等系统升级以后再来测试。
在ubuntu上安装参考:http://www.arthurtoday.com/2012/08/ubuntu-install-titanium.html)
安装完成后启动,在Dashboard页面的Configure Native SDKs中指定已经下载并解压缩好了的android-SDK的路径。
iOS和Mobile Web的sdk都已经自动安装好了。这样安装环境配置完毕。
新建一个空白project进行测试,选择Titanium Mobile Project,输入project Name和App id就可以了。这样就新建了一个项目。
这个项目虽然空白可是应该可以用模拟器运行的,不过在我运行的时候出现了两个问题。
第一,ios的模拟器无法启动。
报错:The project 'firstTitaniumProject.xcodeproj' does not contain a target named 'firstTitaniumProject-universal'
到网上查找原因,发现了我程式中的两个问题。
1.project Name和App id要对应,例如:project name为‘firstTitaniumProject’,则App id为‘com.xxx.firstTitaniumProject’.
2.在project命名时,不可以使用含有‘Titanium’字样的名字。
详细参考:http://developer.appcelerator.com/question/126958/the-naming-rule-for-app-id
第二,android的模拟器无法启动
报错:This platform has more than one ABI,please spacify one using --aboi.
这个也在appcelerator官网找到了同样的问题。可以没有官方的解答,都是热心用户的解答,可是我测试都不行,可能是环境有差异吧。
参考:http://developer.appcelerator.com/question/133160/android-emulator-wont-work-at-all
不过根据这个网页的说法,我找到了设置emulator的地方,
Titanium Studio > Preferences > Aptana Studio > Titanium,在Default Android SDK中设置的是android2.2。
然后我又发现了一个地方,选中项目,
Run As > Run Configurations > Titanium Android Emulator > 当前项目,Android API的值为android4.1(应该是取的我已经安装最新的SDK)
猜想这两个地方是不是要对应呢?于是修改Android API为android2.2。android模拟器成功启动。
为了进一步验证,于是把两个地方都改为android4.1,发现之前的问题又发生了。这就有点奇怪。
于是试着把Android API改回到android2.2,Default Android SDK保持android4.1不变,模拟器启动成功。
在接下来的测试中发现,Default Android SDK的设定值并不会影响模拟器的启动。而Android API的值只有设在android4.0一下才可以(不包括android4.0)。
所以现在只能在android4.0一下的环境中调试,而且只有Android API设为android2.2的的时候,程式能加载进入模拟器,其他虽然模拟器启动,可是加载程式都不成功。
以上仅是我的测试结果,如果那位朋友找到问题的解决办法,欢迎提供。

===================================================================================
另外在网上看到一篇Titanium的使用者的使用体验文章不错,转载过来。
链接:http://mobile.51cto.com/web-337037.htm
     http://mobile.51cto.com/web-337040.htm
成也Titanium,败也Titanium之cons
本文旨在从Titanium自身出发来发现其好的和不好的地方,相信随着大家的加入,提供商的大力投入,会不断的推动Titanium的成长。至于是否能满足大家的需要,看完本文之后,大家也应该有个自己的判断。

AD: 51CTO云计算架构师峰会 抢票进行中!


随着Titanium不断的发展,开发者们纷纷加入到这个队伍中来。很多人在开始的时候都对这种混合应用开发还存在这一定的犹豫,我为什么选择它?它是否能够满足我的需求,实现我的预期目标?我使用它是否能发挥出它自身的特长?等等

很多人喜欢把Titanium和PhoneGap搁在一起去比较,本文的目的不是这个,如果你想知道他们的区别,“百度一下你就知道”。

首先,Titanium是什么?Titanium是Appcelerator公司提供的一个开源的开发平台,它允许我们使用WEB开发技术,如:Javascript、HTML、CSS等来创建原生移动应用。Titanium Mobile SDK是目前被25万移动应用开发者、3万5千应用所采纳的领先跨平台移动应用开发解决方案。(数据来自官方)

以下站在中立的立场,先从正面来评价一下Titanium,之后的文章会从反面来说明。(当然有些观点基于本人自己的开发体验)

1)免费的Titanium

Titanium是开源免费的(Apache License Version 2.0),Appcelerator公司通过Github公布了Titanium相关源码:

Appcelerator Titanium Mobile

Appcelerator Titanium Desktop

Titanium Mobile Kitchen Sink Demo

Modules for Appcelerator's Titanium

Build scripts and config for Titanium

……

IDE开发工具Titanium Studio也是免费的。

http://www.appcelerator.com/products/titanium-studio/

2)快速的原型开发

Titanium真正意义上加速了应用的开发速度,因为它允许你采用一种灵活的方式来创建应用,相比通常的应用开发(Object-C的iOS引用,Java的Android应用)来说,它需要写很少的代码,花费更少的时间。

无论你是选择原生开发或选择跨平台的工具包来开发应用,都可以使用Titanium来创建原型,通过UI来评估用户的交互,因为其快速,便利的开发特性。

3)面向Web的设计

应用自身一般都是通过Web技术开发的,Titanium的重点也就是来帮助那些使用web服务的应用的开发。

它有很大的好处,不仅简化了开发过程,而且还节省了通过远程通信交换信息时候所花费的开销。典型的一个例子就是通过JSON形式来做数据传递。

JSON(JavaScript Object Notation) 是一种基于JavaScript(JavaScript-like objects)的轻量级的数据交换格式,而Titanium提供纯正的JavaScript API,所以你需要做的就是定义一个局部变量,然后从网络接收的数据赋给这个变量即可,不需要对数据进行解析,提取和转换(除非是一些不支持的JSON数据类型,比如date)。

4)使用JavaScript开发

这是一种很多开发者都熟悉的语言,它能使很多具有Web开发背景的开发者迅速的转入到移动应用的开发中来。更重要的是,Titanium 最大程度的实现了基于原型的脚本语言的本质特征:灵活及结构化的组织。

开发者可以利用JavaScript的语法来迅速的创建iPhone,iPad,Android等平台的应用,不再需要具备Object-C和Java经验。

而且像jQuery,YUI等一大批成熟的JS框架可以在Titanium中灵活应用。

5)支持跨平台

只需要编写维护一套代码,Titanium会为你编译出各个平台的原生应用后在多平台上运行,但是你还是要先重点开发其中一个平台的代码,然后进行必要的修正来让他在第二个平台也能正常运行。

好处是显而易见的,你不必学习两个独立的语言(Object-C,Java),还可以实现很高水平的代码重用性。

多平台下代码的实现可以通过多种方式实现,比如IF/ELSE,分离的jss文件,分离的js文件已经平台特有的子文件夹。

当然他也不是那么万能的,你不能说类似“write once, run on iOS and Android”这样的话(套用一下Java的口号)。

6)迅速成长的社区

Appcelerator已经创建了一个社区,它具有25万移动应用开发者,他们使用Titanium跨平台开发工具开发了3万5千应用,并且推出了Open Mobile Marketplace,开发者可以销售,购买,共享自己的Module,Template,Design element以及扩展的web服务。

Appcelerator最近也获得了重要的投资(其中C轮融资150万),收购了Cocoafish来提供云服务,增强平台的功能。

显然,Appcelerator 正在创建一个很好的,正在快速成长的平台,以后会越来越好。

7)使用原生UI控件

Titanium提供最接近原生应用的应用,所有的UI控件都使用了原生控件,应用具有原生应用的"look and feel"。

它提供了一些通用的API,同时也提供了一些平台特有的API,只需要添加简单的判断即可实现。

8)丰富的API

目前最新版本1.8.2中,提供了Modules: 36个,Objects: 119个,Methods: 5657个,Properties: 3180个,涵盖了数据库,文件系统,GPS地理信息,地图,媒体,网络,SNS,RESTful,SOAP,HTML5等各个领域。

9)可扩展性

当TitaniumSDK自身提供的API不能满足你的需求,你可以扩展Titanium,编写你自己的module(当然这样的module是平台特有的,使用Object-C做iOS的module,使用Java做Android的module),然后在JavaScript中调用自己的 module。由于是通过各自的开发语言来实现module,所以所有的平台特性都能够使用。

10)源码安全

Titanium将源码js文件在发布的应用中进行了编译,无法查看,保证了应用源码的安全性。

这里需要特别提醒的是,在开发Android应用完成后,制作APK文件时,一定要修改tiapp.xml的以下设置,如果 ti.deploytype被设置为“development”,Titanium在构建时会将你的tiapp.xml和Resources下的所有东西原封不动的打包入 APK(assert),别人都不需要反编译,简单的解压就能获取你所有的源代码。
Xml代码

   1. <property name="ti.deploytype">production</property>
   2. <property name="ti.android.compilejs" type="bool">true</property>

11)内存管理

自动的内存管理处理,iOS应用中不再需要特别考虑Object-C所特有的内存管理。

12)……

这里需要大家来补充

在下一篇中我将继续为大家重点为大家梳理Titanium反面,看看Titaniun还有那些不足之处。
------------------------
正如所有事情一样,每一个设计方法,在每一个决策,都有优点和缺点。对于简单,小的应用来说,Titanium应该是最好的选择,但如果你希望强化你的应用程序的话还是选择原生开发环境比较好。Titanium 作为开发原型来说是一个非常优秀的工具,你可以花费很少的时间,作成prototype展示给客户,进行可用性测试。但是不管是正反哪个方面,在每次项目中都应该去评估,因为它跟取决于项目自身。需要考虑的关键点是:效益,成本,预算,开发的复杂性,跨平台支持有多重要,项目的战略,性能的重要性等等。你必须权衡每个正反方面的观点,根据你的具

AD: 51CTO云计算架构师峰会 抢票进行中!


接上篇,我们来说说Titanium另外一面,看看他到底有什么样的不足。

1)收费的Titanium

天下没有免费的午餐,免费的另一面就是收费!Titanium的营收模式分两种:增值收费和平台。基本部件免费,高级部件、Titanium Studio的附加功能和官方专业指导服务都需要付费。而且要想获得他们专业的1对1服务,更是相当的昂贵!

2)贫乏的开发文档

API文档不完整,要么书写的过于简单,要么干脆就没有提到,要么就是版本已经升级没来得及更新,偶尔还有写错的。

查看API是很多时候解决问题的最好方式,应该在最大程度上重视API的提供。

提供的Guides内容也很有限,很多东西都没有提到,也就是能够得到一些基本的信息而已。

Guides虽然是以WIKI的形式提供的,但也只能是他们自己的职员才能够编辑。

--->(2012/03/26)Titanium 提供可编辑的Community Wiki了

同样在Github上的project里理应开发的wiki也没有开放。

他们提供了很多的入门视频,出发点是好的,但是一些由于版本升级后已经过期的视频没有被拿下,无法分辨是否还能观看使用。

3)Q&A论坛不完善

首先他们使用的Q&A论坛程序本身在技术和设计上就存在很多问题,比如你想查找个问题是很费劲的,它所给你显示的结果的排序非常混乱,不知道是否结合了回答数,点击数,发布时间等,但就是跟你想象的结果差的太远,你就得挨个看看每个问题是否跟自己的问题类似,当你将你的Q&A Profile的Notifications设置成Enabled的时候,你也很多时候收不到来自论坛的邮件。这样你就无法知道是否有人回答了你的问题,不得不每次都把问题挨个查看一遍。

很多人希望得到他们开发人员的回答,但是他们很少在Q&A论坛中回答问题,偶尔一次就是很难得的了。你会发现很长时间都没有人理会问题,很多时候还是一些热心的开发者来提供回答。

4)构建问题太多

这是大家普遍反应的问题,在环境构筑,应用构建时候会出现很多问题,比如找不到SDK,build时出错,不能启动模拟器等等

应用构建花费时间太长,很多时候当你点击启动emulator后,很长时间才能把模拟器启动起来,而模拟器启动起来后,你又会发现,Titanium总是提示找不到模拟器,让你重新启动。你不得不一遍一遍的重复这启动这个操作,直到它好用。

5)性能太差

问题最大的还是性能问题,在Android下尤为严重(1.8版后引入V8后稍有改善)。当你往页面上添加很多View的时候,页面显示就很吃力,当你的Tableview中有很多行时,滚动起来就很费劲等等。

6)无缘无故的crash

最苦恼的就是这个问题了,因为它会让你抓狂。也不知道什么原因,莫名的系统就提示你发生错误,不能响应了。一个最严重的问题是,应用程序崩溃时没有任何明显的原因,而且错误报告太简单,很难帮助开发者解决问题。很严重的时候他会影响到开发者发布应用到Appstore或AndroidMarket上去。

7)无法做内存管理

不用开发者考虑内存管理,是好事也是坏事。你将无法知道你的内存使用状况,发生内存溢出的话,你将无从下手。很多时候会让你陷入内存溢出的困境中,无法解决。

8)UI也存在问题

目前提供的UI控件也存在着Bug,比如说,不能响应事件,无法滚动,不能显示等等。

UI是应用的“门脸”,如果这里出现了问题,将直接导致用户卸载应用。有时候导航不能正常工作,造成了一些导航控制不能实现,UI的设计被打破,如果这发生在一个真正的应用程序商店的产品身上的话,对开发者来说将是一个灾难。但是苦恼的是你怎么Review你的代码都发现它没有任何毛病。

9)Bug修复太慢

成千上万的开发者在使用Titanium,每天都会发现很多问题,提交给了Appcelerator。但是你会发现很多bug很长时间都未能解决,间隔几年的都有。

10)IDE功能不全

最开始Appcelerator提供的IDE是Titanium Developer,自从收购Aptana之后,开始提供Titanium Studio。Titanium Studio是一个基于Eclipse的Aptana自定义版的IDE开发工具,它允许你创建,管理,测试你的移动应用项目工程,而且将工程自动打包发布到模拟器或者真机上去。而Titanium Studio在一遇到问题是就不在往控制台输出信息,最为严重的是会偶尔在构建的时候忽略代码的修改。你不得不每次修改完代码后clean你的工程。

没有官方的可视化开发工具,可视化开发对于应用的页面布局是很重要的,无论是Android还是iOS都提供了强大的GUI工具。Titanium却迟迟没有提供,这就意味着你必须手动书写你自己的代码来实现你的布局。

调试代码很不方便,Titanium studio还需要加强代码的调试功能。

11)错误提示不准确

对于开发者来说,调试程序相当重要的,而在程序出错的时候,查看出错的位置,异常的堆栈等信息是很必要的。但是在开发中Titanium的错误提示很难让你找到问题所在,很多时候你都会得到一个模糊的错误提示,它没有给出你具体的错误,你也很难判断错误。很多时候不得不先把一大部分代码删除了,一点点的网上添加来看看那里出了错误。

12)应用文件太大

在构建应用时会生成大量的文件,一个很简单的应用动辄就5,6M大小。而如果用原生的话,估计也就几十K大小。

当Titanium把你的代码转换成目标平台(iOS,Android)代码的时候,它产生了大量的类。比如我们查看Xcode工程的话,会发现它生成了大概450个类,而这些类中我们可能用到的也就是10来个左右。这虽然不是很大的问题,但是他堆积到你的应用中,增大了应用的大小,从而将会加大用户访问网络的流量。

在Android上,如果你查看应用源码的话,你会发现它被写的特别的臃肿。

13)功能受限

Javascript不是Objective-C也不是Java,所以相比Object-C和Java开发出来的原生应用,可实现功能的范围有所限制。正如前所述,使用JavaScript开发是简单快速的,但是也将失去了原生应用开发语言的一些特有的功能。

而且从代码上来说,Object-C和Java的结构化严格规范,使得程序很容易维护,而JavaScript灵活宽松的语法也加大了维护的难度。

14)并非完全的开源

说Appcelerator不是完全的开源,一点儿不过,他不接受众多开发者的贡献。他是能说是公开了源代码而已。

15)Appcelerator在监视你

Appcelerator在监视你,你知道吗?为了分析app,Titanium默认开启了分析功能。还有你想使用Titanium Studio创建应用的前提是:从Appcelerator申请账户,这样一来,你创建了什么应用,支持什么平台等等,都会传回给 Appcelerator。Appcelerator每次发布的移动应用趋势报告就来源于此。

16)API封装不足

尽管Titanium同时支持iOS和Android,但是目前的API还是需要写很多基于iOS和Android平台的代码(尽管他已经为各个SDK简化了代码)。

对于JSON对象的正确性也需要特别的注意,自带的parser很严格,最好得先使用eval一下。

Titanium API的灵活性也带来了不足,虽然他能你用短短的几行代码实现原生代码很长代码才能实现的功能,但是另一面来说他也限制了功能。比如你想给window设置一个铺满的背景,在原生代码中是很普通很简单的功能,但是Titanium中需要很多代码才能实现。

17)代码的可维护性

Titanium在一定程度上增加了代码的复杂度。何出此言,随着app的功能的增加,代码在不断增多,开发也变得更复杂,你也将会遇到更严重的技术问题,比如:随机崩溃,奇怪的行为,恼人的错误,等等。

而代码的组织,代码的可读性,MVC层次的分割,multi-device的支持, multi-platform的支持等等,都是需要你考虑的问题。

18)其他

不断的发布新的产品而不去修复既有产品、网站的问题。而且“新”产品总是在beta或者准备阶段发布。

有开发者通过Titanium开发的应用未通过Apple的审查,原因是应用调用了Apple的私有API,但是Appcelerator不承认他们有这个问题。

http://developer.appcelerator.com/question/123785/app-has-bee-rejected-by-non-public-api

最后说一个网上最差的案例!有人花2万多美元通过Titanium开发了一个iPad应用,但是经常莫名的crash,内存溢出。应用作者开始寻找 Titanium Professional support,这当然要付很昂贵的服务费。虽然应用作者很详细的说明问题,甚至把相关代码发给了他们,但在很长一段时间里都没能解决问题。应用作者就把问题反映给了Appcelerator的CTO(抄送CEO),很快就有了回复。承任Titanium存在Bug,并相应的提出ticket承诺在以后版本中修正但是不可能等那么长时间等他们版本升级,所以应用作者需要更加专业的企业级服务

得到的回复是,每小时375美元帮他排查代码的问题,而应用作者估计他们至少需要20到40个小时才能通读他的代码后给出建议,这将是一笔不小的花费啊!

http://labs.thesedays.com/blog/2010/02/04/review-of-appcelerator-titanium/

正如所有事情一样,每一个设计方法,在每一个决策,都有优点和缺点。对于简单,小的应用来说,Titanium应该是最好的选择,但如果你希望强化你的应用程序的话还是选择原生开发环境比较好。Titanium 作为开发原型来说是一个非常优秀的工具,你可以花费很少的时间,作成prototype展示给客户,进行可用性测试。但是不管是正反哪个方面,在每次项目中都应该去评估,因为它跟取决于项目自身。需要考虑的关键点是:效益,成本,预算,开发的复杂性,跨平台支持有多重要,项目的战略,性能的重要性等等。你必须权衡每个正反方面的观点,根据你的具体优先顺序,来确定它是否适合你的需求。但是从个人观点来说,当你启动一个新的项目时,应该考虑考虑 Titanium,它是一个很棒的选择!

posted @ 2012-09-21 18:47  日光之下无新事  阅读(2832)  评论(1编辑  收藏  举报