上周末去光谷书城,不经意间看到了程序员杂志2008年合订本,无意中看到这篇经典的文章:Andy Rubin 独家专访,感受颇深,将这篇文章稍微整理了下,在这里与大家一起分享。声明:原文章来源于程序员杂志2008年第一期,本人看到这篇文章后收获很多,将原文稍微修改(原文比较长,去掉无关紧要的内容,保留经典部分)。
整理后的文章如下:
2007 年11 月Google 宣布Android 平台,被众多评论者认为是今年移动领域最具影响力的事件之一。恰在12 月,Android 平台创始人Andy Rubin 访问中国,《程序员》杂志有幸成为采访他的第一家中国媒体,本文就是Andy 与杂志总编孟岩的对话。
…………
孟岩:这么说您也很喜欢iPhone?那么为什么还劳神费力开发Android 这样一个新的手机操作系统?
Andy :没错,iPhone 非常棒,但是它是一家公司的产品, 它从里到外的设计都是特定的,只有一个按钮,那么大的屏幕,特有的软件系统。尽管它很棒,但是它就是苹果的,别的制造商用不了。Android 不同,Android对所有人开放,而不只是一家厂商。你可以在摩托、三星、LG等几十个厂商的手机上运行Android。对于开发者来说,这一点意义重大,它意味着你写的手机应用可以无需修改地运行在几十个不同厂商出产的手机上。
孟岩:Android 手机会很贵吗?
Andy :不会。手机硬件越来越便宜。相对来说,软件成本才是居高不下。在整个手机的成本中,软件所占比例越来越大。这根20多年前发生在PC领域中的情况一模一样。Android是开源软件,能够有效降低软件的成本,从而降低手机的整体价格。
孟岩:如何保证那些手机都能够顺利地运行Android 的呢?各种手机的配置千差万别,难道是像微软那样指定一个硬件规范,要求厂商去遵守吗?
Andy :当然不是。这里面可是有门道的, 我们在设计时就努力地让Android 变得很容易移植到不同手机设备上。Android 也许是目前最具可移植性的手机操作系统。给你讲个实际例子吧。今年感恩节前后,我们的一个工程师打算利用假期尝试把Android 移植到一款诺基亚手机上。这是一款与我们的参考设备完全不同的手机,屏幕尺寸、按钮、无线设备统统不同。你猜猜他用了多长时间完成这一工作?
孟岩:少说也得一个星期吧?
Andy :只用了三个多小时,通共改动了4行C语言源代码。
孟岩:太令人震惊了!
Andy:可不是吗,连我也感到震惊。我想这就是开放平台的威力。
孟岩:您提到开放,一个开放的手机软件平台对于手机制造商来说有什么意义呢?
Andy :目前手机操作系统大约占手机成本的20%,而在此之上,手机制造商还必须自己集成若干重要应用软件,如浏览器、短信、图片显示软件等等,这给他们带来了不小的负担。Android 提供了一个从操作系统到应用程序的完整软件栈,同时又允许人们定制差异化,以形成自己竞争优势,对于手机制造商来说,其意义不言而喻。开放带来的另一个好处是允许厂商自主解决问题,当你发现Android系统中有bug或者不符合你要求的地方,不必等上18个月,而是可以直接解决。
…………….
孟岩:如果Android 取得成功的话,Google 和你本人肯定无意成为手机软件领域的统治者吗?
Andy :当然不会。开放本身就意味着没有人统治一切。况且如今已经有三十多家公司加入Android联盟,实际上Android 不是Google 一家的,任何人都可以拥有Android。相信我,没有人能成为Android世界的垄断者。
孟岩:如果是这样的话? Google又能得到什么好处?
Andy :你还记得我刚才说过的,今天的手机软件产业与20 多年前的PC软件产业如出一辙。因此我们要注意,如果只有一家公司来提供手机基础软件的话,那么毫无疑问就会再次产生一个巨无霸的垄断者。今天世界上大约12 亿PC用户,可是手机用户有30 亿之多!这意味着,手机一定会成为人们获取信息的主要设备。如果有一家公司垄断了手机软件市场,它就可以决定人们可以看或不可以看什么样的信息, 这是很严重的问题, 也是Google 不愿意看到的。我们开发Android 并且将其开放, 就是要防止这种情况发生, 让每个人都可以平等自由地访问信息。只要用户能够自由获取信息,Google 就可以找到自己的业务模式。
孟岩: 好吧,那么告诉我, 你为什么要把这个系统命名为Android ?
Andy :Android 其实是我于2005年1 月创办的手机操作系统软件公司的名字,半年后这家公司被Google收购了,不过我们的产品名字继续称为Android。至于其来历嘛,我创办的上一家公司叫做Danger(危险),你说如果上一家公司叫“危险”的话,下一家公司该叫什么名字?总不能叫“完蛋”吧?我是说,高科技公司取名字尽可以有趣一些,既然Linus Torvalds把自己写的操作系统称为Linux,那么我的名字是Andrew,把这家公司叫做Android有何不可呢?再加上我本身是个机器人迷,所以Android 这个名字还是不错的。事实上, 在Android 之前,我们能已经做出来一款手机,叫做T-Mobile Sidekick。这款产品很成功,好莱坞的很多明星都用它。但是我觉得毕竟它能够触及到的人群还是有限,所以决定做一个手机操作系统,能够运行在各种手机设备上。
孟岩:Android 由Linux+Java 构成。手机操作系统用Linux 我能理解, 用Java 也是情理之中。可是Android 不是把现有的成熟的Java 拿来直接用,而是从头开始重新实现了一个Java,从虚拟机到相当多的Java 类库。这不是重新发明轮子吗?有这个必要吗?
Andy :对我来说,“Java”这个词意味着四种东西:一种编程语言,一种虚拟机,一个类库,和一个应用程序框架。我们的确重新开发了虚拟机,这是因为要克服现有手机JVM的一些固有缺陷,比如启动时间过长,功能受限。你知道,Java ME为了保证“一次开发,到处运行”,就不得不迁就那些配置非常低端的手机设备,结果导致其功能十分有限。而你看看iPhone之所以这么酷,就是因为它完全不考虑要去兼容什么过时的设备,iPhone的配置完全不亚于一台五年前的PC。我们在设计之初就决定,甩掉不必要的历史包袱,对Android的硬件配置作出一定的要求,从而使得我们可以在比较高的水平上重新设计和优化JVM。此外,我们的确完全重新开发了一个应用程序框架,称之为Android应用框架。这是因为我们对于如何组织手机应用程序有全新的、特别的想法,现有的Java ME完全不能满足我们的需要,所以重新开发一个,这并没有什么大不了的。
孟岩:什么全新的、特别孟岩:什么全新的、特别的想法,能透露一下吗?
Andy :我们希望支持手机应用程序的mash-up。“Mash-up”这个词是从Web 2.0 里偷过来的,你应该知道什么是Web 2.0 mash-up 吧?
孟岩:这我当然知道。比如我从一个网页上抓下一块XHTML 数据,再从另一个Web Services 那里获得一些XML 数据,我就可以把这两块数据mash-up 起来,形成新的XML 数据,并且这一数据可以在此被别人mash-up。不过Web 2.0 中的mash-up 是基于XML数据的,难道Android 中的mash-up 也需要借助XML 来完成吗?
Andy :好问题。在传统的手机开发中,应用程序要么调用操作系统服务,要么通过程序库获得较高级的服务。如果操作系统和程序库都没有提供某项功能,应用程序开发者只好自己实现。在Web上,一个Web应用不仅可以使用本机上由操作系统提供的服务,还可以以你刚才所说的方式使用其他Web 应用所提供的服务。这样一来,Web 应用程序不仅可以依赖操作系统服务,而且可以彼此相互提供服务。这就是我们想在Android中达成的目标,也是为什么我们要重新开发一个应用框架的根本原因。
孟岩:这个想法是怎么来的?
Andy :你知道Google是一家互联网公司,并且拥有很多世界上最聪明的软件工程师,像mash-up 这样的想法就长在Google的DNA里,所以把这种思想带入手机平台很自然。
孟岩:能详细的讲讲Android 如何实现mash-up 吗?
Andy :Android 的mash-up 中有两个关键概念,一个称为Activity,一个称为Intent。Activity 可以完成某些工作,而Intent 可以表达“要做某事”,一个Activity可以满足若干Intents。我举一个例子好了,比如我在写一个email,打算附加一个图片附件,需要选择图片。我会广播一个Intent,说:“我要选择图片,你们谁能选择图片?”。那么设备中的Android 应用和外部的服务,如Flickr 和Picasa 都可以举手响应说:“我行!”然后用户就可以选择其中最合适的那个来选择图片。
孟岩:听起来很像GUI 框架中的Signal/Slot ?
Andy :我觉得更好的类比是微软的COM体系。Android 可以把设备内和互联网上的服务都以上述的方式mash-up 起来。这一能力实在非凡。它使得开发者能够在一个非常高的层次上快速开发高质量的应用。
孟岩:这对于开发者确实有很大的吸引力。
Andy :当然。对于开发者而言,Android 是一个非常有特色的先进的平台, 能够放大开发者的能力和效率。同时,Android 的开发语言和环境都是开发者所熟悉的。Java 语言是世界上最流行的语言,而在开发环境方面,我们选择了大家熟悉的Eclipse和IntelliJ。所有的软件、工具和模拟器都是免费的,整个系统稍后还会完全开源,开发者无需做任何痛苦的转型,就可以为Android 开发应用。
…………
读后感
看了以上Android之父对每个问题的解析,我们这些Android应用程序开发人员大脑中的很多疑惑,是不是都消失了?每个Android开发人员都能从这篇文章中受到很大的启发,如果想看原文请到程序员杂志的官网站去下载。在后面的篇幅中我们会抽空,继续与大家分享Android方面的一些经典的文章。
转:http://www.moandroid.com/?p=1065
相关推荐
《Android之父深入解析Android--mayandong》这本书是由安卓系统的创始人所著,为我们揭示了Android操作系统的深层次原理和开发内幕。作为一名专业的IT行业人士,深入理解Android系统对于移动开发至关重要,尤其是...
#### 一、Android之父深入解析Android **1.1 Android的诞生背景** - **2007年11月**:Google宣布Android平台,被视为当年移动领域最具影响力的事件之一。 - **背景**:在Android发布之前,市场上的移动操作系统...
本文将详细探讨Android界面XML的基本属性以及几种常用的布局方式,帮助读者深入了解Android开发的核心技术之一。 #### 二、Android界面的基本属性 Android界面设计主要依赖于XML布局文件,这些文件中包含了各种...
标题《Android MultiMedia框架完全解析》中指出,本文将深入解析Android操作系统的多媒体框架。这个框架覆盖了从应用程序层到驱动程序层的整个层次结构,而且作者指出,为了撰写本文,他投入了大量的精力。这暗示了...
本篇文章将深入解析`ConstraintLayout`的使用,帮助开发者充分利用其功能,提升应用的UI设计效率。 `ConstraintLayout`是Google在Android Design Support Library中引入的一种布局,它允许开发者通过建立视图间的...
课程由拥有丰富软硬云整合经验的专家王家林主讲,结合他与Android之父以及Google、三星、HTC等公司团队的合作经验,为学员揭示AF(Application Framework)的设计理念和实现细节。 课程内容分为多个主题,首先从...
然后在Java代码中解析这个布局,并将其添加到地图的父视图上。确保视图的位置正确对齐到Marker,可能需要计算屏幕坐标和视图坐标。以下是一个简单的自定义callout布局示例: ```xml android:layout_width="wrap_...
介绍了Zygote服务的作用,它是Android系统中所有应用程序进程的父进程,负责创建新的应用程序进程。 #### 十、AndroidGWES之基本原理篇 探讨了Android图形窗口环境系统(GWES)的基础原理,包括窗口管理、输入处理等...
在Android应用开发中,RelativeLayout是一种常用的布局管理器,它允许我们根据相对位置...通过深入研究"Android应用源码之12.RelativeLayout"中的示例,开发者可以深化对RelativeLayout布局的理解,提升应用开发技能。
每个子视图可以通过`android:layout_align`、`android:layout_to`等属性与另一个视图对齐或相对于父视图定位。相对布局灵活,但可能会导致复杂的依赖关系,增加布局解析时间。 3. 帧布局(FrameLayout) 帧布局简单...
本主题探讨的是Android中的主题文件夹及其相关知识,通过分析源码和使用相关工具,我们可以深入理解如何定制和管理Android应用的主题。 1. **主题结构** Android主题主要由XML资源文件定义,通常位于`res/values`...
在深入探索Android底层架构之前,我们首先需要理解其核心构成与运作原理。Android系统作为全球最广泛使用的移动操作系统之一,其底层架构的复杂性和精妙性是确保其稳定性和高效性的基石。 ### **1. 分析方法论探讨...
接下来,我们将深入解析Android面试中经常出现的View绘制流程的知识点。 首先,当一个Activity获得焦点时,它会触发绘制布局的请求。这一过程是由Android framework处理的,从根节点开始对布局树进行measure、...
根据提供的文件信息,本文将深入解析Android用户界面设计的相关知识点。Android用户界面是智能手机和平板电脑等设备上的操作系统界面,用户通过触摸屏幕与之交互。接下来,将详细介绍Android用户界面的布局管理、...
### Android核心分析——设计...综上所述,通过对Android核心概念和设计意图的深入探讨,结合具体的知识点解析,可以帮助开发者更好地理解和掌握Android系统的工作原理和技术细节,为后续的开发工作打下坚实的基础。
在style.xml文件中,创建一个新的Style并指定父Style,通常是Android内置的某个Style。Style的定义格式如下: ```xml <style name="CustomTextStyle" parent="android:Widget.TextView"> <item name="android:...
2. **布局解析**:TextView会解析XML布局文件中的属性,如`android:text`、`android:textSize`、`android:textColor`等,这些属性的处理都在源码中得以实现。 3. **测量与布局**:在Android的视图系统中,TextView...
根据提供的文件信息,我们可以深入探讨Android开发中涉及的几个关键概念和实践操作,特别是与`RelativeLayout`、`TextView`和`ImageView`相关的知识点。 ### Android 开发基础:使用 RelativeLayout 进行布局 ####...
《Android图片裁剪库——android-crop的深度解析》 在Android应用开发中,处理图片是常见的需求之一,尤其在用户需要上传头像或者选择特定区域时,图片裁剪功能显得尤为重要。今天我们将深入探讨一个名为"android-...
本文将深入探讨Android中常用的几种布局类型,包括线性布局(LinearLayout)、相对布局(RelativeLayout)、表格布局(TableLayout)、绝对布局(AbsoluteLayout)、标签布局(TabLayout)以及层布局(FrameLayout),并重点分析...