主题:【原创】手机应用开发商之烦恼 [4] 跨平台 -- 邓侃
[4] 跨平台
手机的型号款式众多。每开发一个应用软件,开发者面临的头痛事情,就是要移植到各种不同的OS平台,以及每个平台上不同型号和版本的手机。不仅如此,每当手机制造商推出一款新的手机,应用开发商不得不被动地跟进,这样更进一步增加了移植的负担。
如何让移植的工作变得轻松?这就是所谓跨平台的问题。实现跨平台的思路有三个。
1. 跨平台的编译。
说到不同的平台,大家首先想到的是不同平台的APIs不同。不同APIs固然很麻烦,但是这不是麻烦的全部分。源代码的编译,往往依赖一些libs,还要调用平台的环境变量。不同的平台,放置libs的位置不同,系统环境变量也各不相同。所以就有Automake和Autoconf这些工具,试图实现跨平台的编译。
但是Automake和Autoconf的入门壁垒很高,不容易掌握。如果有谁不信,不妨下载Apache HTTP server的源代码,和附带的makefile和config.in。打开这些makefile和config.in,看看是不是好懂。然后改写一部份源代码,让Apache做一些很酷很搞怪的动作。有些人抱怨,说makefile和config.in很邪恶。当你做完上述事情以后,或许你会理解和同情这些人的情绪。
为什么抱怨makefile和config.in很邪恶?其中很重要的原因是如何处理各个模块之间的相互依赖关系,libs的路径,以及环境变量。这些操作基本上是字符串的处理,makefile和config.in采用的是regular expression这个字符串处理工具。Regular expression中文翻译是正则表达式。凭心而论,正则表达式的发明和设计非常聪明。但是过于聪明了,就变成阳春白雪,不便于读解。拿一段稍微复杂一点的正则表达式过来,一眼读过去,往往一头雾水不解其意。一个字符一个字符死盯着读,也无济于事。无可奈何之余,只好分拆开来,一段一段在电脑里运行,看看究竟是做什么的。
如果满篇充斥着这样折磨人的正则表达式,用户自然会有怨气。不幸的是,类似Apache server这样稍微有点规模的系统,它们的makefile和config.in都是这样的天书。
光抱怨没有用,于是英雄挺身而出,解开发者于倒悬。SCons的办法是用Python来处理各个模块之间的依赖关系,libs的路径,以及环境变量。SCons的想法很简单,用程序来解决字符串处理,回避折磨人的正则表达式。你别说,SCons真的好使,应验了一句老话,简单就是美。
虽然SCons让跨平台的编译变得轻松一些,但是对于开发者而言,每当移植一个新平台新型号,都必须扩充原有的Scons script。所以,SCons的贡献局限于减轻负担,但是负担依然存在。
2. 跨平台的语言。
Java喊的口号是write once run anywhere。 开发者写Java代码很爽,因为跨平台的工作推卸给了Java Virtual Machine(JVM)。换而言之,如果真的实现write once run anywhere这个理想,那么每个平台,每个型号,都得提供对应的JVM。
J2ME的推广并不顺利,原因不仅仅是J2ME在技术上存在缺陷,而且更重要的是厂商之间的协作。Sun Microsystem是IT业强人,Nokia与其它手机制造商也是强人。强强联手固然会有巨大的商业前途,但是困难是彼此都是老大,谁也不服小。更不要说很难达成彼此都觉得公平的利益分配方案。
C#的设计思路与Java很像,但是除了Windows,有没有听说其它平台支持C#?
不久前,Google也来趟浑水,另起炉灶搞了Android。Android里面那个Delvik virtual machine,运行效率的确比J2ME virtual machine要高。究其原因,Delvik其实不是一个彻头彻尾的虚拟机,这是另外一个故事,按下不表。Google号召手机制造商们组织起一个联盟,都来使用Android。这对于应用开发商而言,当然是福音,但是手机制造商们是不是衷心拥护,有待观察。
J2ME,C#和Android,描绘的前景都很诱人,但是严酷的现实是,对于手机应用开发者而言,不仅要移植Symbian,Brew,而且还要移植J2ME,C#和Android,负担不是降低了,反而更重了。
另外,Virtual machine与Native OS相比,运行效率多少会差一点。对于简单的手机应用来讲,这个缺陷不矛盾。但是如果手机应用涉及到大量数据,导致高额的IO和CPU消耗,virtual machine的缺陷就变得明显。
3. 拆分应用程序,提炼跨平台的模块。
很多手机应用程序,都涉及到用户界面的渲染,譬如绘制button之类控件,还有影像的显示。都涉及到与网络服务器的交互,譬如类似于HTML里面form那样的功能。都涉及到与用户的交互,譬如用户触摸屏幕的不同部位,应用程序有不同响应。
界面渲染,与网络服务器交互,与用户交互,这些功能,浏览器里都有。设想一下,把应用程序中有关界面渲染,与网络服务器和用户的交互分离出来,交给浏览器去完成,那么手机应用的开发强度就会大大降低。开发商们要做的工作主要是设计HTML页面,调试JavaScript。
但是单纯依赖HTML + JavaScript 还不够。手机应用程序不仅要与网络服务器交互,与用户交互,还需要与手机本地的功能块交互,譬如地址本,譬如GPS驱动模块,等等。所以,除了HTML + JavaScript,还要有Plug-in。手机应用开发商的开发负担,将来主要集中在开发这些plug-ins上。
WebKit和V8很值得研究,WebKit作为一个渲染机(Rendering engine),主要负责HTML的解析和界面的渲染。V8是新一代JavaScript engine。之所以值得研究,有两个原因。a. 它们都是开源项目,b. WebKit已经包含在多个平台上,譬如Symbian,iPhone和Android。
前面说了三个实现跨平台的思路,对于手机开发者而言,应该做什么样的选择?个人的建议是,
1. 基点放在1。
2. 着力发展3,plug-in部份结合1。
3. 密切跟踪2的进展。
本帖一共被 1 帖 引用 (帖内工具实现)
恭喜:你意外获得【通宝】一枚
谢谢:作者意外获得【通宝】一枚
鲜花已经成功送出。
此次送花为【有效送花赞扬,涨乐善、声望】
思想在于交流。每个人的学识都有限,多交流,我的成为你的,你的也成为我的,大家就共同进步了。
怪不得你说困呢,我看完也累呢,呵呵。
新出的Google G1,和iphone的两种模式究竟会鹿死谁手,现在看着Apple似乎放松了对第三方应用软件的限制
G1- HTC,T-Mobile,Google三者分工合作
HTC负责手机制造,T-Mboile作为网络提供商,Google负责结合已有内容服务提供扩展。
各司其则。不知道这个新的合作方式前景如何。不过就G1的发布会来说,大家似乎对它寄予厚望。
三方都使出全身解数来推销这款新产品和新平台。
iphone确实是一个奇迹,谁想在竞争如此激烈的市场苹果活生生夺走了不小的市场。我还比较赞许的是当新3GIphone新产品推出,公司对其第一代机器的处理,只是略微调整了一下价格,整机出售,我不知道别的地方,我这里中国人几乎都抢疯了,有的人买了三台,猛的听说买了七八台,后来所有店一天半之间全部断货。如果每个产品更新换代的时候,其旧产品都能销售到如此火爆程度。这个资金回流对水果公司及其网络提供商可谓重要的很。
有趣的是最近上市的新手机都是拿来和iphone PK要不就号称iphone Killer,呵呵,iphone好小强,这么多次都没有被杀死。
HTC最近在市场上动作频频,前一段玩命连出新机Diamond和TouchPro,它到底想干嘛???
想踢诺基亚下去,N96看过了,好像市场反响一般般,暂时看来。
最后再表达个疑问,我一直觉得Google G1的外观和键盘布局和Tmobile当年和Motorola早期合作的sidekick很象,可能我看的不够仔细,希望有牛人给说说。
结尾让我再怀念一下爱立信,阿尔卡特现在真是惨不忍睹,前几天看的机器还不如国内的小灵通呢,估计很快就会消失呢。对了,还有BenQ.
做了几年java,现在工作需要研究memcached/libevent。看c代码最痛苦的就是makefile了。想尽办法都不能导到eclipse-cdt中编译通过,只能用命令行编译。
想想java中的ant/antx/maven,哪受过这遭罪阿。
这年月是越来越懒了,想当年用c/c++也没挑IDE,现在eclipse用惯了,就离不开了。
曾经做过几天brew的手机开发,用c代码模拟c++中继承和需函数,要多别扭就有多别扭了。
G1跟SideKick象,一点都不奇怪,因为Android的领导早年就是SideKick的设计者Andy Rubin。当年他像Google兜售新一代手机的想法后,Google把他整个公司买下来了。有兴趣可以看看http://www.wired.com/techbiz/media/magazine/16-07/ff_android
最近一直做HTC手机方面的工作,Kaiser,Tytnll, Excalibur等,我一直不敢恭维。当然主要原因是对WM操作系统不满意,一点都不用户友好。WM需要扔掉很多包袱,才能追上IPHONE,BlackBerry。HTC手机的硬件设计也很不好,花样很多,但没有一个是满意的,我想HTC在软硬件上的设计能力不会很强,应该向各山寨机厂商学习。不管怎么说我觉得Google手机的处女作被HTC做了,不是无可奈何,就是太失策了。
北美采用T-mobile的3G网更可以看出Google在这方面的无奈,北美3G最好的是ATT和Verizon,T-MOBILE只在22个城市有3G网,而就这22个地区覆盖率也很低。不应该期待好的用户体验。
Apple在3G推出前一个星期就把本地(我在湾区)所有Apple专卖店的一代IPHONE全部下架了,想买都没有。你说的是什么地方,这么幸运。
子山和老枪的帖子都是好贴,献花。
现在哪里还能买到iPhone的裸机?我也想搞一台,不为别的,就是玩,玩的方式很变态,abuse它的CPU等等模块,看看它在极端状态下表现如何。
Andy Rubin的故事很有意思,但是Google之所以买断Android,后面的故事很长很长,以后找机会八卦。
OpenEmbedded,比如poky linux 就是利用这个。
但是这个系统主要是用在embedeed linux方面的。
一看邓兄的贴就知道是高手,我才入Mobile这行不到一年,又恰逢手机行业风云际会的时候,好多东西在学习中。期待邓兄的大作。
不带计划的iPHONE现在只能在EBAY上买了,价格在$300-$500之间
邓兄能否谈谈?
比如带宽、处理器计算能力、存储容量、电池等等。
写的时候我还特意去找sidekick看,发现已经从Tmobile网站上撤掉呢。那么说Andy Rubin是拥有专利权包括外观设计呢,否则这么赤裸裸的相像摩托罗拉怎么都不吱一声呢,或则它已经打算放弃这个市场呢。
HTC我当时入手的时候对它期望很大,还正经是考虑了黑莓,诺基亚等才选购的它,订后坦白说,很失望很失望,太难用呢,程序设计太简单化,操作起来很不顺手,显示效果及其分辨率我就更无语呢。那种画面恐怕我只有在2年前的手机上才能找到,用了两个月我就放弃不用了,可惜了一年的合同。同意你的
HTC让人诟病的还有一点,它喜欢把同一款机器交付给不同网络商,其实只是各网络商自己换了个名字,加了个自己公司的贴牌,机器还是同一款。所以之前各大网络商谁也没对它太上心。
我在欧洲,可能Tmobile在这边的网络覆盖会更广一些,相较于你提到的北美覆盖率而言。可能Google着眼的是全球。
关于这三者桃园结义出来闯天下,我比较倾向于Google大哥的野心不满于现有搜索引擎市场,可能其发展也到了瓶颈阶段,它一直期望找个新的突破点,什么都尝试点(好像就google map算看得过去的),新的移动开发平台,亦或成为移动市场的内容服务提供商。于是找了两个小弟HTC和TMobile替他冲锋陷阵,他坐在后面当军师。
iphone因为在推出3G之前已经开始贴广告做宣传,偏巧有中国人在手机店打工,可能提前知道旧款要降价的消息,于是贴在了华人论坛,于是一传十,十传百,成为众人皆知的秘密。忘记是3G推出的前几天还是一周呢,没特意记这个,只是知道身边的人都疯了,有专门到各小镇或其他城市去扫货的,最后各大店都空的时候导致不得不采取网上订购,还要你传真银行帐单,货还得等一段才给你邮,我们当时估计应该是整个地区已经库存不多呢,就这点来说,任何一款手机都做不到这点,不服不行。
我是外行,不过对此很有兴趣,希望大家多探讨,我也好好学习学习。
呵呵,没想到你当时的诉苦帖会转成现在看到的一系列。
iphone的裸机现在只有去ebay,淘宝或手机市场淘呢,我这边人家只剩3G卖呢,但是大家好像对它都没有第一款那么待见。
要论你那种变态的测试,你只有靠我们这种好奇的人帮你填补点银子呢,自己拿钱不太值得。
回复你的帖子是我至今为止最耗神的,写了改,改了写,写完看又觉得不是自己要表达的意思,再重新来过,我还就喜欢在线写。呵呵,底子薄就是不成。
所以特理解你码那么多字,还要条理清晰的列出对应问题的不容易阿。
好的帖子不在于更新快,我们都懂,所以不急不急,慢慢来。
号称是外行,可是山子的帖子内容翔实。
建议把山子把肚子里的存货整理一下,独立发个帖子,这样不至于被埋没了。
我还是比较喜欢现在这种方式,大家从不同的角度来讨讨问题,技术角度,用户角度,爱好者角度多方面。
也许等到了后来您这系列写完,我也就有了胆子出来吼两声呢。
呵呵,您也别急阿。