你可能是一位有经验的移动开发工程师,一个桌面或网页开发者,或者一个完全初出茅庐的编程新手,安卓提供了一个有趣的机会去写下为千百万安卓用户(audience听众)服务的应用
你可能对安卓已经非常熟悉了,这个常见的为软件供能的一种移动设备,如果没有,如果你购买此书想了解安卓(也可以翻译为机器人)的发展,期待可以帮你创造不可阻挡的无感情杀戮机器去清除这个世界上所有的人类,我觉得你要重新考虑下是否要去退货了(作者玩Android机器人梗)
当宣布安卓在2007年问世,Andy Rubin描述它为:
第一个真正开源的完善的平台服务于移动设备,他包括一个操作系统,用户交互还有应用服务,所有的运行在移动手机的软件摆脱所有权的障碍去创造新的突破
从那以后,安卓不仅为手机提供开发平台,还为不断扩展的硬件,包括平板,电视,手表,汽车,还有物联网设备
安卓是一个开源的软件库(stack)包括了一个操作系统,中间件,还有服务于移动设备和嵌入式设备的关键应用(applications)
客观来讲(Critically),对于我们这种开发者,它包含了丰富的API库使编写程序变为可能,同时使有关运行在安卓设备的程序的视觉,感觉还有功能变得更加敏锐。
在安卓中,系统,捆绑软件,还有所有的第三方APP都由一样的API编写,并且在同一时间被执行,这些API以硬件通道(access),视频录制,定位服务,后台服务支持,地图,通知,传感器,关系数据库,内部应用交互,蓝牙,NFC,2D/3D图像为特点。
本书描述了如何去使用这些API去创造你自己的应用程序,在这一章节你将学习一些移动和编写设备硬件发展的指导,同时也会为开发者介绍一些平台特性
安卓有强大的API,一个巨大的多样的用户生态,绝妙的文档,令人激动的开发者交流平台,它是免费的对于那些开发者还有贡献者们,当安卓设备生态不断的发展壮大,你有这个机会去为用户创造全新的应用程序,无论您有没有开发经验.
在没有INS,Snapchat,和PokemonGo的日子,当谷歌还是他的创立者眼里的闪光同时恐龙还在地球闲逛,移动手机仅仅像这样—可以用手拿的电话,体积刚好可以装进公文包,以超长待机为特色,而且,提供了不需要电话线就能打电话的自由。
自从安卓设备面世的十年里,智能手机变得无处不在且不可或缺,硬件进步使变得更强大,更有特点,更亮的屏幕和特色的先进硬件包括加速器(accelerometers),指纹扫描和高清摄像头。
这些优势为现在越来越多的安卓设备增加了很多特点,例如种类越来越多的智能手机,平板,手表,还有电视。
这些硬件的革新为软件的发展提供了肥沃的土壤,提供了更多可能性去发展新的程序。
在最早期的手机程序开发发展中,开发者,一般利用底层C或者C++来编程
,需要去理解他们要编程的特殊的硬件,特别是一些独立的设备或者一系列的从特殊工厂出来的设备,这些固有的复杂的方法意味着为这些设备编写程序往往是滞后于相对应的硬件的。随着硬件技术还有移动互联网的加速发展,这些封闭的方法已然落后。
移动手机软件开发的下一个历史性发展是信息设备小程序(JAVA-hosted MIDlets).MIDSlets是在JAVA虚拟机(JVM)上执行的,一个进程抽象化解释器并让开发者可以创建程序并在多个支持JAVA的设备上运行。
不幸的是,这便捷的代价是更多的繁重的限制对于硬件的访问,。同样的,这通常也要考虑第三方程序去接受硬件的读取同时要正确的处理从手机自带程序的特性,使用MIDSlets时总是很少接受它俩。
JAVA MIDSlets的推出扩展了开发者的受众,但也同时使底层硬件的读取和沙盒处理变得更少,这意味着大多数的程序是常规的桌面程序,或者网页设计提供给小平而已,并没有使用可移动设备的优势。
在安卓的介绍中,它是为了目前日益发展的移动硬件设备提供软件支持而设计出来的现代移动操作系统。
安卓在LINUX kernel上开发了一个开放的设计平台,依靠众多的API库使硬件读取对于所有应用来说成为了可能,同时也支持了程序交互,全面控制
等。
在安卓程序中,所有的的程序都有着相同的地位,第三方程序和原生程序都用相同的API编写在同一时间执行。用户可以用第三方程序替换掉几乎所有的系统程序,甚至你的拨号盘和HOME界面都能被替换。
安卓的生态由以下三个组成部分组成
特殊来讲,安卓程序也由特殊的依赖部件组成,
真正使安卓引人入胜的是它的开放的思想体系,这确保你能修复任何缺点在用许家湖还有原生程序设计中,通过编写扩展的替换件。安卓提供给你,作为一个开发者,满怀希望去制作程序去用来看,感受或者实现某个功能就像你幻想的一样。
仅仅2016年就有超过二十亿的月活使用者利用安卓系统通过谷歌商店下载超过820亿的应用和游戏,安卓生态系统展现了绝无仅有机会去创作应用去影响,去改变,去提升数十亿人的生活。
安卓设备通常自带一系列用户所需的预装软件,在一般的智能机上一般包括一下几种:
许多的安卓程序也附带了以下谷歌出品的移动程序:
这些预装软件存取还有使用的一些数据——例如联系人——对其他第三方软件来说也可用。
开放的安卓生态意味着用户(carriers)和制造商可以定制化UI(user interface)还有为每台设备独立提供程序支持。
对于可携带设备最重要的一点是,解释性平台还有SDK要在制造商和多变的用户之间(across)保持稳定。外观界面(look and feel)在不同的UI是不同的,但是你的成必须在不同的设备上有相同的功能。
对于我们的开发者来说,安卓真正的吸引力在于它的APIs。
作为一个独立的(neutral)的程序开发平台,安卓给你一个可以为更多手机创造安装即用程序的机会。接下来会列出最值得注意的安卓特性。
第一部运行安卓的手机(handset),T-Moblie 的G1,在2008年的十月于美国发布,同时在17年的年末已经有超过20亿月活安卓设备活跃在全球,使它变成全世界最普遍的手机操作系统。
与其作为一个独立的硬件设备而创造的移动操作系统,安卓选择了为更大范围的硬件平台提供支持,从智能手机到平板,电视,手表还有嵌入式设备。
用没有权限收费或所有权的软件,硬件厂商提供安卓设备的花销实际上是比较少的,同时,拥有各种各样软件的生态系统,也让设备厂商不断创造设备或者定制硬件。
因此,几百个生厂厂家,包括三星,LG,HTC,还有摩托罗拉,都在生产安卓设备,这些设备通过快递被分发到全世界的用户的的手中。
智能手机对于使用它的人来说已经变得如此的先进和充满个人特质,他们已经变成了用户的本身的延伸,研究表示许多的移动手机用户如果发现他们找不到手机、失去连接或者电池没电都会变得很焦躁。
移动设备的无处不在,以及我们对它们的依赖,使它们相对于个人电脑有了本质的区别。通过麦克风,摄像头,触摸屏,地址定位还有环境传感器,一部手机也是高效的超感官智能设备。
在很多国家智能手机的使用者能很轻易地超过电脑用户,在世界范围内有30亿移动手机用户。2009年记录了这一年有许多的人第一次通过智能手机接触互联网,而不是电脑。智能手机用户的快速提升,与逐渐进步的高速网络基站还有WIFI热点有关,也为未来的先进的软件提供了更大的可能性。
智能手机的出现改变了用户使用手机的方式。这也给了你,一个应用软件开发者,一个独一无二的机会去创造一个有活力的完善的新程序,并让它成为人生活不可或缺的东西。
除了为拥有最大生态系统的安卓用户提供服务外,安卓还为app的开发提供了基于开发者开发的、真实存在的、为开发者准备的、移动设备动态框架。(真绕啊,可能理解错了,原文:“Android represents a dynamic framework for APP development based on the reality of modern mobile devices designed by developers,for developers”)
拥有简单易用的、强大有力同时又开放的SDK,没有权限费用,拥有绝妙的文档,广阔的使用场景和规格特性,还有激动人心的开发者交流平台,安卓提供了一个能去创造能改变人生活的app的机会。
从商业角度来说,安卓提供了最普遍的智能手机操作系统,提供了面向超过20亿月活全球人数的安卓设备,提供了无与伦比的机会去让你的软件对于全世界的用户来说都是可用的。
安卓程序通常由JAVA或者Kotlin编程语言来编写,同时又ART方法来执行。
*提示:曾经,安卓程序的编写首选JAVA语言编写,但现在,Android Studio 3.0 引进了对Kotlin的支持,并让他作为官方首选的安卓应用编程语言,Kotlin是一个JVM语言(Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。),Kotlin可以与存在的安卓语言或安卓运行期间执行,允许你使用JAVA和Kotlin在一个程序中混合使用。
每一个安卓程序运行在一个独立的进程,为了能读写还有管理进程交出了所有的权限给ART,这也使资源管理必须可以暂停或结束进程。
ART建立在Linux kernel的顶层与底层硬件交互 相交接,包括驱动和内存管理,还有一系列的APIs提供了提供了对解释层,特性还有硬件的通道。
安卓SDK包含了你开始开发,测试,还有debug安卓程序所需要的所有东西。
安卓软件栈是由Linux kernel和C/C++的一些库在应用框架上实现来提供服务、管理、运行还有工作,如图所示。
1.Linux kernel—核心服务(包括硬件驱动、内存管理处理、监控网络还有电量管理)都由Linux kernel处理(根据安卓平台版本的不同和硬件平台的不同,kernel版本也是不一样的)
2.硬件应用层(HAL)—HAL在可以理解的物理设备硬件和栈之间提供了一层抽象。
3.库—运行于kernel和HAL的顶层,安卓包括多个C/C++核心库比如说libc和SSL,同时也有一下
1.对于音视频媒体的播放重播的媒体库。
2.为桌面管理提供的展示管理。
3.图形库包括为2D/3D图形提供支持的SGL和OpenGL
4.对原生数据支持的SQLite
5.为完整的阅览器和因特网安全准备的SSL和WebKit
4.安卓运行时机制—运行时机制使安卓手机超越了简单的移动Linux方案,包括核心库,安卓运行时机制是驱动你的应用程序还有表单的最基础的安卓框架下的引擎。
5.核心库—尽管大部分的安卓程序开发使用Java或者Kotlin Jvm语言,但ART不是一个Java VM,这些核心的安卓库提供了Java库中的大部分的可用功能同时也有一些安卓特殊库。(我被搞迷了,求大神解释)
6.程序框架—程序框架提供了一些被用来开发安卓程序的类,它同时也提供了一些通用的为接触底层硬件、管理用户接口和程序源所准备抽象类。
7.应用程序层—所有的应用程序,包括原生的或者第三方程序,都被建立在应用层上使用相同的一套API库,这些程序层运行在ART上,使用类和服务使应用程序框架可用。
(ART Android Run time不知道怎么翻译)
安卓的一个主要的组成部分是ART,相比与使用传统的Java VM比如Java ME,安卓使用他自己独创的自定义运行环境来确保多个程序能够高效的运行在每一个独立的设备上。
ART使用设备的Linux kernel 去处理底层功能,包括安全监控,线程,还有进程和存储管理。虽然这些都可以用C/C++编写的程序来使它能更接近Linux 一步。尽管你可以做到这些,但是大部分的实例表明你没有理由这么做。
如果C/C++的运行速度和高效性是你的程序所必需的,安卓提供了一个原生开发套件NDK。NDK被设计用来使你可以创造C++库使用这个libc和libm库,并使他们原生的访问OpenGL。
提示:本书专注于特定的运行在ART上的使用SDK的安卓程序编写;
NDK开发并不是本书的范围
如果你想学习NDK的开发,探索Linux kernel和C/C++,修改ART或是其他的想法
请关注安卓开源项目网站。
所有的安卓的硬件还有系统服务访问都是使用ART来管理的,ART作为一个中间层。通过使用这种运行机制去控制程序的处理,开发者需要一个抽象的层去确保它们永远不会担心特殊的硬件要求。
ART处理运行Dalvik 可执行文件(.dex)—以最早的虚拟机“Dalvik”的名字命名—一种最优化的文件格式来保证最小的记忆脚本。又可以创建.dex可执行文件通过Java或者Kotlin等语言来编译类,通过SDK所提供的支持工具。
提示:在第二章你将会学到更多有关创建dex文件的方法。
安卓的体系结构个鼓励组件复用,病是你可以发布和分享可用程序(activities)、服务、其他程序的数据、附带你定义的安全控制的访问限制。
相同的机制可以使你去制作联系人或者拨号盘的替代品,也可以让你将你的应用组件去让其他开发者来在其上面从头到尾的建立起自己的UI或者功能拓展。
安卓提供了一系列的APIs来帮助你开发安卓程序,相比把它们全部列出来,不如查看他们的开发文档,在(我们登不上去的安卓官网)会给你完整的开发包,包括安卓SDK
安卓的目标是大范围的移动硬件,所以注意一些新的可选择APIs会很依赖于你的设备支持。