开发者眼中的Android手机平台

作者 仝健 发布于 2008年5月16日 上午2时54分

社区
Java
主题
JCP标准,
移动
标签
JavaFX Mobile,
Java ME

大家都知道,Google推出了他的手机平台——Android,Google做什么都会引来无数人的眼球,并总能创造出非凡的奇迹。相信这次他推出这个手机平台,应该会吸引到无数开发人员的眼球,甚至会吸引很多有识之士转向手机开发。因为相对于现有的其他平台,手机可是一块尚未充分开拓的新大陆,Android又是新中之新,机会要多很多。似乎是为了加速这个过程,Google还举办了“Android 开发者大赛”,奖金总额高达1000万美元。

在这次Beijing Open Party上,我们有幸认识了一位经验丰富的技术专家和两位db4o(注:著名对象数据库,主要应用在嵌入式设备平台)的核心开发人员。InfoQ中文站特邀编辑仝健对三位进行了采访,请他们从开发者角度谈一下对 Android的认识和感觉。


三位受访者的履历:

屠程远(以下简称屠):94年毕业,一直从事软件编程工作。掌握汇编、C、C++、Delphi、.NET、Java等语言及架构,主要从事操作系统底层和软件框架的编程工作。rcpandroid项目owner。

张黄瞩(以下简称张):自由职业者,Apache Harmony的committer, db4o 核心开发人员, P-Unit项目作者,熟悉java语言,应用程序架构设计,测试驱动开发,以及增量重构代码。

杨普(以下简称杨): Apahce Harmony PMC(Project Management Committee) 成员, committer,主要兴趣是编程语言,敏捷方法,开源软件和社区。


InfoQ中文站: 我们知道,Android是基于Java的,那么目前它支不支持其他语言呢?

:目前Android SDK只支持Java。

:其实我们不能说Android是基于java的。对于开发者而言,Android支持使用java语言语法编程,注意,不是支持 Java,而是Java语言语法,因为Android支持的Java语法类库仅仅是J2SE 5的子集,并无通过任何java标准认证。Android讲代码编译为Dalvik虚拟机字节码来运行。目前Android官方仅支持java编程语法。

:是的,Java是Sun的注册商标,只有通过了相关规范的兼容性测试才能叫做Java,Android的Dalvik虚拟机和相关类库也不承诺遵守任何Java规范,有关这个问题,Apache Board的成员,MIT的stefano mazzocchi有一篇非常精彩的Blog:Dalvik: how Google routed around Sun's IP-based licensing restrictions on Java ME

InfoQ中文站:那么,对Java语法编程的程序员而言,最大Java 开发群体是J2EE程序员,对于一个想转向移动平台开发的J2EE程序员来说,转向Android平台是不是一个好选择?又会有哪些困难?

:我所编程接触过的移动平台支持Java的有J2ME、 BlackBerry、Android。J2ME的功能实在太有限,仅支持J2SE很小的一个子集;Android所支持J2SE的子集已经很充分了,在 Java编程方面和J2SE相比几乎没什么限制。很多开源的Java类库仅仅需要很小的修改就能在Android上运行。而在J2ME上要想运用那些类库几乎不可能,只能重新造轮子。BlackBerry里的Java环境比J2ME要强,但强的有限,基本还是无法利用现有众多的J2SE的类库。所以对想转到移动平台的J2EE程序员来说,转向Android平台的代价最小,所能做的事情最多。
转向Android平台的困难主要在于这是个全新的平台,手机硬件还没发布,没有实际项目积累和实际的运行环境。现在开发基于Andoid的应用难免有些空中楼阁的意味,无法经过实际运行环境的检验。也很少有客户愿意为半年一年后还不保证能运转的应用买单,所以对程序员来说会有较长的投入期。

:我个人觉得这个转型会非常容易。尽管Android支持的不是标准的 Java TM,但是已经覆盖了大部分的Java的语法和类库。困难之处,我觉得可能在于开发人员对移动设备和服务器设备的理解。移动设备的具有一些独有的特性,比如电源消耗问题,屏幕大小限制,以及CPU的速度等。因此,在各个资源之间的平衡策略往往和传统的服务端编程不一样。

:还有两个原因选择Android,

  • Google承诺Android将会是一个以Apache License开源的项目(尽管Google没有公开的开源时间表),而Apache License是一个对商业应用和开源应用都非常宽松的License。
  • Android可以说是一个为移动互联网设计的手机系统,在上面内置了诸如json, location, gdata, browser, map等等很多API,因此对于J2EE程序员来说,Android这样的终端设备不仅提供了熟悉的场景,而且又提供了实现很多idea的可能性。

Android目前还有一个困难就是它的API和实现都还不是非常稳定,文档也不是很好,因为太新所以缺乏成功案例,当然它的社区非常活跃,几乎所有问题都可以在那里得到迅速回答,而Google为此举办的Android编程大赛有望带来一些让人激动的应用案例。

InfoQ中文站:从您个人的经验出发,Android手机与以往的手机平台开发上有怎样的不同呢?

:以往手机平台感觉是各个厂商各自一套封闭体系,J2me只能作为二等公民存在,一等公民是C、C++。在Android平台,Java是标准语言,一等公民。在Android平台上编程感觉受限制最小,甚至有在为PC机编程的感觉。个人感觉C、C++语言最好退缩到其最擅长的底层驱动领域。在应用层,Java还是最好的语言,资源丰富、编程简单、可移植性强,前提是硬件速度已经快到了一个程度。Android平台所对应的硬件是半年一年后的,那时手机的硬件能力会有新的发展。记得十年前PC机的标准配置是128M内存、 300Mhz CPU,跑WIndows 98,已经有很有丰富的应用了。即使今天很多手机的硬件已经超过这一水平,更别说半年一年之后了。

:在Android上开发会容易很多。 Android是一个全新的开放的平台,其目标程序员为普通Java开发人员。相比J2ME, Symbian程序员,Android的入门门槛应该说非常低。

InfoQ中文站:能不能从开发者的角度把J2ME和Android对比评价一下?

:J2ME的提出是因为当初手机硬件速度很低,Java虚拟机运行负担较重,所以大幅裁剪了J2SE,推出了J2ME。大幅精简的后果就是开发功能大大受限,和PC平台差距巨大。随着硬件能力的提高,个人认为手机支持 J2SE是必由之路。Android平台朝这个方向迈出了大大的一步,大大缩小了手机和PC平台上编程的差距。

InfoQ中文站:Android平台上有可以使用的数据库吗,可不可以大概介绍一下?

:目前我了解到的一个是SQLite,一个就是db4o。SQLite 是Android内置的精简型关系型数据库,能实现标准关系型数据库的大部分功能。db4o是对象数据库,在编程上更为简单。个人比较看好对象数据库在手机上的使用。因为在手机上所要处理的数据毕竟是少量的,对性能要求不象数据库服务器那么高。这时对象数据库编程简单、可灵活适应未来变化的优点就显现出来了。但因为db4o不是Android内置支持的,目前还做不到和Android特有的一些编程部件的无缝结合。

:Android内嵌了SQLite数据库,这是一个轻量级的关系型数据库。与J2SE不同,Android上定义了一套新的数据库操作API,而不是使用JDBC。db4objects宣布了其旗舰产品db4o可以无缝的运行在Android平台。db4o是一款面向对象的原生(native)数据库。我个人不是很喜欢Android内置的这套数据库API,因为它并不遵循JDBC规范。在我的理解,Android的一大亮点就是拥抱现有的技术,赢得了java开发人员的喜欢,而新的查询API意味着原有的基于JDBC的数据库相关的程序不能直接运行于Android。从这个角度来讲,db4o在所有的API方面保持了高度一致,无需做任何修改,因为db4o是完全基于java的原生数据库。

开发人员可能更习惯使用面向关系型数据库,但是db4o在API设计方面非常适合移动设备的开发,非常简洁。拿Android平台内置的联系人数据结构来讲,存储,读取联系人,如果使用db4o,只需10行只有的代码,如果使用SQLite的话,则需要上百行代码。db4o直接面对对象,无需把对象转化为表结构字段,因为编程更不容易出错。和服务端不同,手机上的数据库更要求自适应管理,而无需数据库管理员,这也是db4o的设计目标之一。

:db4o在Android上的部署不需要任何配置或改动,就当作一个普通的library就可以流畅运行了。由于市场上还没有Android手机出售所以无法给出确切的性能比较,但是在模拟器上的比较证明db4o的综合性能丝毫不逊于SQLite, 在一些情况下甚至有数量级的优势,比如已知数据的id来进行删/改/查等,对于手机应用这是非常普遍的使用场景。

Android上目前没有成熟的O/R Mapping框架,对于大多数习惯了Hibernate,JDO,iBatis等各种框架的开发人员来说,面向对象数据库更符合他们的使用习惯。而且面向对象数据库直接避免了O/R Mapping的问题,重构代码完全不用考虑重构数据库或者配置,更不用修改SQL,因此更加敏捷。


作者简介:仝键,网名咖啡屋的鼠标,06年大学毕业,普通程序员,专注于Java、Flex方面的开发、Agile等软件开发方法论的学习。爱好参加社区活动。