Professional Android 4th个人学习分享(一)

安卓程序的发展

你可能是一位有经验的移动开发工程师,一个桌面或网页开发者,或者一个完全初出茅庐的编程新手,安卓提供了一个有趣的机会去写下为千百万安卓用户(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界面都能被替换。

安卓生态

安卓的生态由以下三个组成部分组成

组成
一个为移动设备制作的开源免费操作系统
一个为了制作软件而提供的开发者平台
运行安卓程序的设备

特殊来讲,安卓程序也由特殊的依赖部件组成,

包括以下
1.兼容性自定义文件(CDD)和兼容性测试工具(CTS)来确定硬件设备兼容性的要求,来支持安卓程序栈。
2.Linux操作系统kernel提供了硬件底层交互,记忆存储还有执行控制,还有所有的移动便携设备的优化
3.硬件开发所需要的开源库,包括SQLite,WebKit,OpenGL和媒体管理器
4.在内存管理中处理和控制安卓程序,包括安卓内存管理(ART)还有核心库所提供的安卓特殊功能,运行时间对于所使用的移动设备来说被设计的短小且高效。
5.应用程序架构可变的(agnosticlly)使系统层服务对于应用层来说是可用的,包括窗口控制和地址控制,数据库,电话通讯和传感器。
6.用户交互框架被用来部署和控制程序。
7.一系列的核心预装程序
8.SDK被用来制造应用程序,包括发布组建,IDE,示例代码和文件。

真正使安卓引人入胜的是它的开放的思想体系,这确保你能修复任何缺点在用许家湖还有原生程序设计中,通过编写扩展的替换件。安卓提供给你,作为一个开发者,满怀希望去制作程序去用来看,感受或者实现某个功能就像你幻想的一样。
仅仅2016年就有超过二十亿的月活使用者利用安卓系统通过谷歌商店下载超过820亿的应用和游戏,安卓生态系统展现了绝无仅有机会去创作应用去影响,去改变,去提升数十亿人的生活。
第三页

系统自带应用程序

安卓设备通常自带一系列用户所需的预装软件,在一般的智能机上一般包括一下几种:

例如:
1.电话拨号盘
2.SMS(短信服务)管理程序
3.浏览器
4.电子邮箱(E-mail client)
5.日历
6.联系人
7.音乐播放器和相册
8.相机和录音机
9.计算器
10.主界面
11.闹钟

许多的安卓程序也附带了以下谷歌出品的移动程序:

例如:
1.谷歌商店去下载第三方安卓程序
2.谷歌地图程序,包括街景,行驶方向还有逐项导航,卫星视图和交通情况等
3.谷歌邮箱服务
4.Youtube视频播放
5.谷歌浏览器
6.谷歌主页还有谷歌助手

这些预装软件存取还有使用的一些数据——例如联系人——对其他第三方软件来说也可用。
开放的安卓生态意味着用户(carriers)和制造商可以定制化UI(user interface)还有为每台设备独立提供程序支持。
对于可携带设备最重要的一点是,解释性平台还有SDK要在制造商和多变的用户之间(across)保持稳定。外观界面(look and feel)在不同的UI是不同的,但是你的成必须在不同的设备上有相同的功能。
在这里插入图片描述

安卓SDK特性

对于我们的开发者来说,安卓真正的吸引力在于它的APIs。
作为一个独立的(neutral)的程序开发平台,安卓给你一个可以为更多手机创造安装即用程序的机会。接下来会列出最值得注意的安卓特性。

例如:
1.对因特网地址还有电话录透明的访问通过GMS,EDGE,3G,4G,LTE,和WIFI网络服务支持,使你的APP可以通过移动网络或者WIFI发送和接受数据。
2.为如GPS一样的地理位置服务还有网络所在地址监测有综合性的APIs。
3.对于整合地图进入UI有全面的支持。
4.完全的多媒体控制,包括利用摄像头和麦克风进行播放和录制。
5.为播放和记录多样的音频/视频和静止图片准备的多媒体库。
6.为传感硬件准备的APIs,包括加速度计,指南针,气压计还有指纹传感器。
7.为WIFI,蓝牙和NFC准备的库。
8.可分享的数据库还有为联系人,日历和多媒题准备的APIs。
9.后台服务还有提前通知系统。
10.综合性的浏览器。
11.移动优化,硬件图形加速,包括基于路径的2D图形库和对使用OpenGL ES 2.0 的3D图形。
12.对动态地址框架的定位。

安卓运行在什么上

第一部运行安卓的手机(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的机会。

对于新入门的安卓开发者以下不成障碍:
1.对于安卓开发者不需要证书证明。
2.谷歌商店对于您发布和经营的软件提供免费的,需预付,内购的或者订阅形式等盈利方式。
3.对于程序发布并没有各种批准程序(还是需要审批的吧,不然一大堆抄袭)
4.开发这对品牌有完全的控制。

从商业角度来说,安卓提供了最普遍的智能手机操作系统,提供了面向超过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安卓程序所需要的所有东西。

例如
1.安卓APIs库—SDK的核心是安卓APIs库,提供给开发者接触安卓栈的通路,这些库与谷歌用户开发的原生安卓应用所用的是一样的。
2.开发工具—SDK包括了Android Studio IDE和一些其他的开发工具,使你编译和纠错应用程序由安卓源码编译为可执行程序。你将在第二章学习有关开发者工具的内容。“Get Started”
3.安卓虚拟机的管理器与模拟器—安卓模拟器是一个完全的交互式的移动设备模拟器,有很多可替换的皮肤。模拟器在Android Virtual Device(AVD)上模拟一个设备的硬件配置。使用模拟器,你将能看到你的应用程序在真正的安卓设备上是如何表现和运行的。所有的安卓程序都在ART上运行,所以软件模拟是非常棒的开发环境——事实上,因为它是硬件中性(hardware-neutral),它相比于所有的独立硬件能提供更好的独立环境。
4.完整的文档—SDK包括了可扩展的代码层参考信息,无比的详细,还包含了如何去使用每个包和类。对于代码文档,安卓的参考文档和开发者指南解释了如何去开始,给了安卓开发底层功能解释的具体细节,标明了最好的实例,给框架标题提供了深度解释。
5.代码简单—安卓SDK包含了精选的简单程序来演示一些安卓可用功能,这些程序也标明了如何去使用独立的API特性。
6.网络支持—安卓在大多数的网站、博客还有多个开发者论坛有充满生机的开发者讨论群体,如Stack Overflow是一个大型的受欢迎的可以解决安卓难题的平台,许多谷歌的安卓工程师在栈交流和某蓝色小鸟上特别活跃。
在这里插入图片描述

理解安卓软件栈

安卓软件栈是由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)

(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或者功能拓展。

下面的这些程序服务是安卓应用体系结构的基石,提供了这些框架也许你会在你自己的软件中使用。
1.活动管理和碎片管理—活动和碎片定义了你程序的用户接口。线程和碎片管理控制着你线程和碎片的生命周期,反馈,包括管理着线程堆。第3~5章
2.视图—被用来建设用户接口控制在你的线程和碎片中。第5章
3.通知管理—提供了一致的且免入侵的机制便于你提醒你的用户。第11章
4.内容提供方—让你的程序可以分享数据。第10章
5.资源管理—支持非代码资源,比如说字符或者是图形。第4章
6.互联网—提供了交换应用之间数据的机制还有他们的组件。第6章
在这里插入图片描述

安卓库

安卓提供了一系列的APIs来帮助你开发安卓程序,相比把它们全部列出来,不如查看他们的开发文档,在(我们登不上去的安卓官网)会给你完整的开发包,包括安卓SDK
安卓的目标是大范围的移动硬件,所以注意一些新的可选择APIs会很依赖于你的设备支持。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值