上周末去光谷书城,不经意间看到了程序员杂志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
相关推荐
U盘量产工具FLASH量产工具SM3280&3281&3282-AvidiaV0209整合版
java课程期末考试
分布式消息中间件,参考kafka,未完成
修木工施工规范及流程.docx
内容概要:本文详细介绍了VECTOR提供的MICROSAR OBD协议栈解决方案,涵盖了OBD模块、ECU支持、监控功能和服务请求等方面的内容。此外,还讨论了OBD在不同国家和地区的技术标准与法规要求,以及MICROSAR OBD解决方案的优势,如适应不同项目的需求和高度集成于AUTOSAR 4平台。 适合人群:汽车电子工程师、软件开发者、汽车制造商及相关行业从业人员。 使用场景及目标:① 适用于车辆诊断系统的开发和维护;②帮助工程师理解和掌握OBD协议的具体实施方法和应用场景;③ 提供了一个成熟、可扩展的解决方案,用于满足OBD相关标准和法规的要求。 其他说明:本文不仅提供了技术层面的详细解析,还探讨了实际操作过程中可能遇到的问题和解决方案。同时强调了屏蔽信息过载的重要性,提醒工程师保持内心平静,专注做好本职工作。
适用于 Python 的 LINE 消息 API SDK适用于 Python 的 LINE Messaging API 的 SDK。介绍适用于 Python 的 LINE Messaging API SDK 可以轻松使用 LINE Messaging API 开发机器人,您可以在几分钟内创建一个示例机器人。文档请参阅官方 API 文档了解更多信息英语https //developers.line.biz/en/docs/messaging-api/overview/日语https://developers.line.biz/ja/docs/messaging-api/overview/要求Python >= 3.9安装$ pip 安装 line-bot-sdk概要用法from flask import Flask, request, abortfrom linebot.v3 import ( WebhookHandler)from linebot.v3.exceptions import ( InvalidSig
Java字节码工程工具包Javassist 版本 3版权所有 (C) 1999-2023 Shigeru Chiba,保留所有权利。Javassist(JAVA 编程助手)使 Java 字节码操作变得简单。它是一个用于编辑 Java 字节码的类库它使 Java 程序能够在运行时定义新类并在 JVM 加载类文件时对其进行修改。与其他类似的字节码编辑器不同,Javassist 提供两个级别的 API源代码级别和字节码级别。如果用户使用源代码级别 API,他们可以编辑类文件而无需了解 Java 字节码的规范。整个 API 仅使用 Java 语言的词汇表进行设计。您甚至可以以源文本的形式指定插入的字节码Javassist 会即时编译它。另一方面,字节码级别 API 允许用户像其他编辑器一样直接编辑类文件。该软件根据 Mozilla 公共许可证版本 1.1、GNU 宽通用公共许可证版本 2.1 或更高版本或 Apache 许可证版本 2.0 分发。文件README.md 此自述文件。Changes.md 发行说明。License.html 许可证文件。tuto
本项目是基于Python语言开发的西西家居全屋定制系统,旨在为家居行业提供一个高效、智能的定制解决方案。项目涵盖了从客户需求分析、设计方案生成、材料选购到最终订单生成的全过程,力求实现家居定制的数字化和智能化。 在主要功能方面,系统具备强大的客户管理模块,能够详细记录和分析客户的定制需求。设计模块则采用先进的三维建模技术,为客户提供直观、真实的家居设计方案预览。此外,系统还整合了丰富的材料数据库,方便客户根据自身喜好和预算进行材料选择。 框架方面,项目采用了B/S架构,确保了系统的稳定性和可扩展性。后端使用Python的Django框架,前端则结合了HTML、CSS和JavaScript等技术,实现了用户界面的友好和响应速度。 开发此项目的目的,不仅是为了满足家居行业对个性化定制的需求,也为计算机相关专业的学生提供了一个实践和学习的平台,有助于提升他们的实际开发能力。
Javascript 是数字化创新的起点,是语言的基础,也是基本概念。Basecamp JavascriptJavascript 是数字化创新的起点,是语言的基础,也是基本概念。嵌套存储库,可作为启动项下待办事项的实践活动。
已弃用 — Coinbase Python APICoinbase Coinbase API V2的官方 Python 库。重要提示此库当前针对的是 API V2,而 OAuth 客户端需要 V2 权限(即wallet:accounts:read)。如果您仍在使用 API V1,请使用此库的旧版本。特征接近 100% 的测试覆盖率。支持API Key + Secret和OAuth 2身份验证。调用 API 的便捷方法 - 为您打包 JSON!自动将 API 响应解析为相关的 Python 对象。使用IPython时,所有对象都具有可制表完成的方法和属性。安装coinbase可以在PYPI上使用。使用以下命令安装pippip install coinbase或者easy_installeasy_install coinbase该库目前针对 Python 版本 2.7 和 3.4+ 进行了测试。注意此软件包名称过去是指George Sibble维护的非官方 coinbase_python 库。George 慷慨地允许我们使用此软件包
基于RBAC权限控制的基础后台
本项目是基于Python爬虫的网络小说数据分析系统的设计与实现,旨在为计算机相关专业的大学生提供一个实践平台,特别是在毕业设计和项目实战练习方面。项目通过Python强大的网络爬虫技术,从流行的网络小说网站自动抓取数据,包括书籍信息、章节内容、用户评论等。 主要功能涵盖数据采集、数据清洗、数据存储和数据分析。数据采集模块利用Scrapy等爬虫框架高效抓取网页内容;数据清洗模块确保数据的准确性和一致性;数据存储则采用MySQL等数据库系统,便于数据管理和查询;数据分析模块通过Pandas、NumPy等工具进行数据处理和分析,生成多维度的统计报告和可视化图表。 此项目不仅帮助学生掌握Python编程和网络爬虫技术,还能让他们深入了解数据分析的全过程,提升解决实际问题的能力。同时,系统的实现和应用也反映了现代信息技术在文学创作和消费领域的应用价值和潜力。
本项目是一个基于Java的在线日语培训平台的设计与实现,采用SSM框架(Spring+SpringMVC+MyBatis)进行开发,旨在为计算机相关专业的学生提供一个实践和学习的平台,同时也为日语学习者提供一个在线学习的空间。项目中主要功能涵盖了用户管理、课程管理、学习资源上传下载、在线测试与反馈等多个方面。通过该平台,教师能够轻松管理课程内容和学生信息,学生则可以随时随地访问学习资源,参与在线课程和测试,从而提高学习效率和兴趣。 在开发此项目的过程中,我们重点关注了系统的可维护性和可扩展性,确保代码结构清晰,便于后续的功能迭代和优化。此外,通过使用SSM框架,实现了前后端的分离,提高了开发效率和系统的响应速度。该项目不仅能够满足毕设的需求,还能作为Java学习者提升编程能力和实践经验的实用工具。
基于java的机票管理系统设计与实现.docx
该项目为《基于Java实现的数据结构设计源码》,共包含51个文件,主要由46个Java源文件构成,辅以2个文本文件、1个Git忽略文件、1个许可证文件以及1个XML文件,全面涵盖了数据结构设计的核心内容。
绿色食品 水稻生产操作规程.docx
他妈的 Fuck是一款出色的应用程序,其灵感来自@liamosaur 的 推文,它可以纠正以前控制台命令中的错误。The Fuck太慢了吗?试试实验性的即时模式!更多示例➜ apt-get install vimE: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?➜ fucksudo apt-get install vim [enter/↑/↓/ctrl+c][sudo] password for nvbn:Reading package lists... Done...➜ git pushfatal: The current branch master has no upstream branch.To push the current branch and set the remote
全国大学生FPGA创新设计竞赛作品 “泡罩包装药品质量在线检测平台“.zip
桃苗木质量基本要求表.docx
使用 Python 漂亮地打印表格数据,这是一个库和一个命令行实用程序。存储库从 bitbucket.org/astanin/python-tabulate 迁移而来。python-tabulate使用 Python、库和命令行实用程序漂亮地打印表格数据。该库的主要用例是轻松打印小表格只需一个函数调用,格式由数据本身引导为轻量级纯文本标记创作表格数据多种输出格式适合进一步编辑或转换混合文本和数字数据的可读表示智能列对齐、可配置数字格式、小数点对齐安装要安装 Python 库和命令行实用程序,请运行pip install tabulate命令行实用程序将在 Linux 上安装为(例如tabulate)或者在 Windows 上的 Python 安装中安装为(例如)。bin/usr/bintabulate.exeScriptsC:\Python39\Scripts\tabulate.exe您可以考虑仅为当前用户安装该库pip install tabulate --user在这种情况下,命令行实用程序将安装到 ~/.local/bin/tabula