🌈个人主页:小新_-
🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
🏆所属专栏: Android移动开发欢迎订阅,持续更新中~~~
✨让小新带着你快乐的学习吧~✨
1、Android的历史、发展和系统架构
1.1 Android历史
2003年,以Andy Rubin(Android之父)为首的创业者成立了Android 公司,致力于研发一种新型的数码相机系统。不过,由于受市场前景所限,公司快速转向智能手机平台,试图与诺基亚Symbian及微软的Windows Mobile竞争。然而,资金逐渐成为一个问题,最终谷歌公司于2005年收购了Android公司,Andy Rubin开始率领团队开发基于Linux的移动操作系统,绿色机器人形象和预览版本则在2007年诞生。
2007年11月5日,Google公司正式向外界发布Android操作系统。Google公司宣布建立一个由34家手机制造商,软件开发商,电信运营商以及芯片制造商等全球著名企业组成的联盟组织。该联盟组织宣布支持Google发布的Android操作系统以及应用程序,并同时提出共同开发Android系统,由此Android的标志性Logo绿色机器人诞生了。 在随后的2008年,世界上第一款Android手机问世,首款Android手机命名为HTC Dream(T-Mobile G1)。需要大家记住的是,2008年,世界第一款搭载Android系统的手机HTC Dream(T-MoblieG1),如图
1.2 Android的发展与前景
美国加利福尼亚州山景城的谷歌公司总部草坪上的绿色机器人和各种甜点雕塑,这便是Android系统的吉祥物和各个版本代号。显然,在2005年收购Android,可能是谷歌最正确的投资之一。 时至今日,Android已经是家喻户晓的移动平台,也是谷歌公司最为重要的业务之一。有趣的是,几乎每一个Android版本代号,都是一种美味的甜点,这也让原本冷冰冰的操作系统更具人文气息。
2、Android的系统架构
Android系统的底层建立在Linux系统之上,该平台由操作系统、中间件、用户界面和应用软件4层组成,它采用一种被称为软件叠层(Software Stack)的方式进行构建。这种软件叠层结构使得层与层之间相互分离,明确各层的分工。这种分工保证了层与层之间的低耦合,当下层的层内或层下发生改变时,上层应用层序无需任何改变。
2.1应用程序层
Android系统包含一系列的应用程序(Application),包括电子邮件客户端、SMS程序、日历、联系人等。这些都是手机系统里自带的系统APP,也是本书要讲解的主要内容:编写Android系统上的应用程序。
2.2应用程序框架
2.3.函数库
Android包含一套被不同组件所使用的C/C++库的集合。一般来说,Android应用开发者不能直接调用这套C/C++库集,但可以通过它上面的应用程序框架Framework来调用这些库。
(1)系统C库:一个从BSD(Berkeley Software Distribution)系统派生出来的标准C系统库(libc),并且专门为嵌入式Linux设备调整过。
(2)媒体库:基于PacketVideo的OpenCORE,这套媒体库支持播放和录制许多流行的音频和视频格式,甚至可以查看静态图片。
(3)Surface Manager:管理对显示子系统的访问,并可以对多个应用程序的2D和3D图层提供无缝整合。
(4)LibWebCore:一个全新的Web浏览器引擎,该引擎对Android浏览器提供支持,也为WebView提供支持,WebView完全可以嵌入到开发者自己的应用程序中。后面的章节会对WebView进行介绍。
(5)SGL:底层的2D图形引擎。
(6)3D libraries:基于OpenGL ES API实现的3D系统,这套3D库既可以使用硬件3D加速(如果硬件支持),也可以使用高度优化的软件3D加速。
(7)FreeType:位图和向量字体显示。
(8)SQLite:供所有应用程序使用的功能强大的轻量级关系型数据库。
2.4.Android运行时
Android运行时(Android Runtime)由两部分组成:Android核心库集和虚拟机ART。其中核心库集提供了Java语言的核心库所能使用的绝大部分功能,而虚拟机ART则负责运行所有的应用程序。
Android5.0以前的Android运行时由Dalvik虚拟机和Android核心库集组成,但由于Dalvik虚拟机采用了一种被称为JIT(Just-in-time)的解释器进行动态编译并执行,因此导致Android运行时比较慢;而ART模式则是在用户安装APP时进行预编译(Ahead-of-time,简称AoT),将原本在程序运行时进行的编译动作提前到应用安装时,这样使得程序在运行时可以减少动态编译的开销,从而提升Android App的运行效率。 但是,由于ART需要在安装App时进行AOT处理,因此ART需要占用更多的存储空间,应用安装和系统启动时间会延长不少。 除此之外,ART还支持ARM、x86和MIPS架构,并且完全兼容64位系统,因此Android5.0必然能够带来更好的用户体验。
2.5.硬件抽象层
硬件抽象层提供标准界面,向更高级别的Java API框架显示设备硬件功能。HAI包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机或蓝牙模块。当API要求访问设备硬件时,Android系统将为该硬件组件加载库模块。
2.6.Linux内核
Android系统建立在Linux2.6之上,Linux内核(Linux Kernel)提供了安全性、内存管理、进程管理、网络协议栈和驱动模型等核心系统服务。除此之外,它也是系统硬件和软件叠层之间的抽象层。
3、搭建Android开发环境
工欲善其事,必先利其器”,选择一款好的开发工具能很大幅度地提升开发效率。Android平台官方推荐的开发工具当属Android Studio,接下来将详细讲解Android开发环境的搭建方法以及Android Studio的安装步骤。
3.1. 需要的工具
JDK。JDK全称是Java Development Kit,是Java语言的软件开发工具包,它包括了Java的运行环境、工具集合、基础类库等内容。
Android SDK。Android SDK是谷歌提供的安卓开发工具包,此包专门为安卓开发提供,包含了大量Android相关的API供开发者开发使用。
Android Studio。这款开发工具是2013年由谷歌官方推出的,经过几年的发展,其稳定性也大大增强,可以说已经完全取代了之前使用插件的形式在Eclipse上开发安卓应用的形式。
3.2 Android Studio的安装
Android Studio可以在Android官网上下载,具体下载地址是:https://developer.android.google.cn/studio/archive。在页面找到Android Studio并下载完成后,双击.exe文件开始安装,安装过程很简单,连续单击Next按钮即可。开始安装界面如图所示。
单击Next按钮开始安装。接下来选择安装组件时建议全选安装,如图所示。
单击Next按钮,进入选择安装Android Studio的安装地址以及Android SDK的安装地址,根据计算机的实际情况选择即可,如图所示。
之后的步骤全部保持默认选项即可。安装完成之后如图所示。
单击Finish按钮,若勾选了Start Android Studio选项则会直接打开Android Studio。首次启动Android Studio会提醒用户选择是否导入之前Android Studio版本的配置,如图所示。因为是首次安装,故选择不导入即可。
单击OK按钮,进入欢迎页面,如图所示。
单击Next按钮进入选择安装类型页面,如图所示。
在这个页面选择Android Studio的安装类型,有Standard和Custom两种选择。Standard表示一切都使用默认的配置,比较方便;Custom则表示可以根据用户的特殊要求进行自定义。由于是首次安装,选择Standard类型即可。单击Next按钮完成选择。
选择完成之后Android Studio即安装完成。之后Studio会尝试联网下载一些更新,等待更新完成之后单击Finish按钮就会进入如图所示界面。
目前为止,Android开发环境就已经全部搭建完成。接下来就开始创建第一个Android应用。
1.3 开始第一个安卓应用
1.3.1 创建HelloWorld项目
在上图所示界面中选择Start a new Android Studio project,进入创建新项目界面,如图所示。
图中,Application name表示应用名称,是该项目安装到手机上之后显示在图标下面的名称,这里填入HelloWorld。Company domain表示公司域名,如果是公司的项目,建议填入“公司名.com”,这里先填入example.com。Package name表示项目的包名,在Android项目中是通过包名来区分不同的项目的,故命名包名称时一定要注意其唯一性。默认的Package name是Android Studio通过应用名称和公司域名的组合生成的,如果不想使用默认的包名,可以单击右侧的Edit按钮修改。
接下来单击Next按钮对项目的最低兼容版本进行设置,如图所示。
Android4.0以上的系统已经占据了绝大部分市场份额,因此这里将Minimum SDK指定为API 15。本书主要针对手机端开发,因此勾选Phone and Tablet复选框。接着单击Next按钮跳转到创建Activity页面,如图所示。
如果安装的是Android2.3及以上的版本,可供选择的模板较多,大家在实际项目中可根据需要自行选择。在这里选择Empty Activity来创建一个空的Activity。选择之后单击Next按钮,进入该Activity以及其对应的layout页面命名界面,如图所示。
界面中Activity Name根据驼峰命名规范自行填写,这里填入HelloWorldActivity,Android Studio自动填入Layout Name,如果不想用默认的命名,可以自行修改。命名填写完成之后单击Finish按钮。等待Android Studio创建好项目,至此,第一个Android应用创建完成,如图所示
大家应该发现了,从第一个项目开始创建到创建完成,一行代码也没有编写。这是因为创建项目时,Android Studio自动生成了很多东西,大大简化了工作重复度。但是要运行一个项目就必须要有一个载体,可以是一部手机,也可以是Android模拟器。现在就来使用Android模拟器来运行程序。 首先创建一个Android模拟器,观察Android Studio顶部工具栏图标,单击AVD Manager图标,会出现创建和启动模拟器界面,如图所示。
由于是第一次创建,所以模拟器列表为空,单击Create Virtual Device按钮开始创建模拟器,如图所示。
可以看到有很多设备可供选择,在最左边一栏选择Phone,默认选择Nexus 5X这台设备的模拟器,不做更改,直接单击Next按钮,开始选择模拟器的系统版本,如图所示。
这里试试最新的Android 8。如果选择其他版本,单击左侧的Download下载相应的版本安装即可。单击Next按钮确认模拟器的配置,如果没有特殊要求就保持默认即可。如图所示。
单击Finish按钮完成模拟器的创建,可以看到模拟器列表中有了一个模拟器设备,如图所示
点击右侧的绿色三角形启动按钮,开始启动模拟器。模拟器就像真实的手机一样,有一个开机过程,开机之后的界面如图所示。
接下来就用它运行第一个Android项目HelloWorld。
运行Android的模拟器已经创建完成,现在就开始在模拟器上运行HelloWorld应用。观察Android Studio顶部的工具栏图标,与启动模拟器时一样有一个绿色三角形运行按钮,单击运行按钮,会弹出一个选择运行设备的对话框,如图所示。
可以看到模拟器设备里有刚刚创建的Nexus S5设备,选中单击OK按钮,等待模拟器响应完毕,HelloWorld就会运行到模拟器上,结果如图所示。
1.4 Android应用的基本组件介绍
Android应用程序通常由一个或多个基本组件组成,之前创建Hello World项目时就用到了Activity组件。其实Android基本组件还包括Service、BroadcastReceiver、ContentProvider等组件,这四大组件也是日后做安卓开发时经常用到的。本节大家先对这些组件有一个大致的认识,后面的内容中会对这些组件做详细介绍。
4.1Activity和View
Activity是Android应用中负责与用户交互的组件,凡是在应用中看到的界面,都是在Activity中显示。前面提过,Activity通过setContentView(View)方法显示指定的组件。 View组件是所有UI组件和容器控件的基类,它是App中用户能看到的部分。View组件是放在容器组件中,或是使用Activity将其显示出来。如果需要通过某个Activity把指定View显示出来,调用Activity的setContentView()方法即可。 若一个Activity中没有调用setContentView()方法来显示指定的View,那么该页面将会显示一个空窗口。 Activity还包含了一个setTheme(int resid)方法,它用来设置对应的Activity的主题风格。比如不希望该Activity显示ActionBar、或以dialog形式显示等,都可以通过该方法来设置。
4.2 Service
Service与Activity相比,可以把Service看作是没有View的Activity,事实上Service也没有可以设置显示View的方法。因为不用显示View,也就不需要与用户交互,故它一般在后台运行,用户是看不到它的。
4.3 BroadcastReceiver
BroadcastReceiver翻译过来就是广播接收器,事实上它在Android中作用也是广播。从代码实现的角度来看,BroadcastReceiver非常类似于事件编程中的监听器,但两者的区别在于,普通事件监听器监听的事件源是程序中的对象,而广播接收器监听的事件源是Android应用中的其他组件。 实现BroadcastReceiver的方式很简单,开发者只要编写继承BroadcastReceiver的类,并重写onReceiver()方法就可以了。但是这只是接收器,那接收的消息从哪里来呢?当其他组件通过sendBroadcast()、sendStickyBroadcast()或sendOrderedBroadcast()方法发送广播消息时,如果接收广播的组件中实现的BroadcastReceiver子类有对应的Action(通过IntentFilter的setAction设置),那么就可以在onReceiver()方法中接收该消息。
实现BroadcastReceiver子类之后,需要在AndroidManifest.xml中注册才能使用该广播。那么BroadcastReceiver如何注册呢?有两种注册方式:
(1)在Java代码中通过Context.registerReceiver()方法注册;
(2)在AndroidManifest.xml中通过<receiver…/>元素完成注册。 这里只是让大家对BroadcastReceiver有一个大致的了解,在后面的会详细介绍。
4.4 ContentProvider
在Android平台中,ContentProvider是一种跨进程间通信。比如当发送短信时,需要在联系人应用中读取指定联系人的数据,这时就需要两个应用程序之间进行数据交换。而ContentProvider提供了这种数据交换的标准。 当开发者实现ContentProvider时,需要实现如下抽象方法:
(1)insert(Uri,,ContentValues):向ContentProvider插入数据;
(2)delete(Uri,ContentValues):删除ContentProvider中指定的数据;
(3)update(Uri,ContentValues,String,String[]):更新ContentProvider指定的数据;
(4)query(Uri,String[],String,String[],String):查询数据。
通常与ContentProvider结合使用的是ContentResolver,一个应用程序使用ContentProvider暴露自己的数据,而另一个应用程序则通过ContentResolver来访问程序
4.5 Intent和IntentFilter
这两个并不是Android应用的组件,但它对Android应用的作用非常大——它是Android应用内不同组件之间通信的载体。当一个Android应用内需要有不同组件之间的跳转,例如一个Activity跳转到另一个Activity,或者Activity跳转到Service时,甚至发送和接收广播时,都需要用到Intent。 Intent封装了大量关于目标组件的信息,可以利用它启动Activity、Service或者BroadcastReceiver。一般称Intent为“意图”,意图可以分为两类:
(1)显式Intent:明确指定需要启动或者触发的组件的类名。
(2)隐式Intent:指定需要启动或者触发的组件应满足怎样的条件。
对于显式Intent,Android系统无须对该Intent做出任何解析,系统直接找到指定的目标组件,启动或者触发它即可。;而对于隐式Intent,Android需要解析出它的条件,然后再在系统中查找与之匹配的目标组件。若找到符合条件的组件,就启动或触发它们。
那么Android系统如何判断是隐式Intent还是显示Intent呢?就是通过IntentFilter来实现的。被调用的组件通过IntentFilter声明自己满足的隐式条件,使系统可以拿来判断是否启动这个组件。关于这个知识点的详细内容,在后面的内容中会详细介绍。
最后,感谢大家的观看~~