Android系统底层建立在Linux系统之上,采用软件叠层(Software Stack)的方式进行构建。使得层与层之间相互分离,明确各层的分工。保证了层与层之间的低耦合,当下层发生改变时上层应用程序无需改变。
一,Android系统由五部分组成:
1, 应用程序层
Android系统包含系列的用java编写的核心应用程序,包含 联系人,浏览器,短信 ........
2,应用程序框架
Android应用程序开发是面向底层的应用程序框架进行的,应用程序框架提供大量Android API 供应用调用。
应用程序框架除了可作为应用开发的基础外,也是软件复用的手段。任何应用程序都可发布自己的功能模块,供其它应用调用。
3,函数库
Android包含一套被不同组件所使用的C/C++库的集合。应用程序可以通过应用程序框架来调用这些库。
核心库: 系统C库,媒体库,Surface Manager(管理对显示子系统的访问),LibWebCore(浏览器引擎),3D libraries(Open GL),FreeType(位图向量字体显示),SQLite
4,Android运行时
Android运行时包含两个部分: Android核心集库(提供java核心库使用的绝大部分功能)和Dalvik虚拟机(负责运行应用程序)
(1) 每个Android应用程序运行在单独的Dalvik虚拟机内(每个应用对应一条Dalvik进程)
(2)Dalvik未完全遵守jvm规范,两者也不兼容。JVM虚拟机运行的java字节码(.class文件),Dalvik运行的是dex(Dalvik Executable)文件,需要通过DX工具将应用程序的所有.class文件编译成.dex文件。
(3)Dalvik虚拟机非常适合在移动终端上使用,相对于pc或服务器端运行的虚拟机,不需要很快的CPU计算速度和大量的内存空间。
a,专有的.dex文件减少了.class文件的冗余信息,把所有的.class文件整合到一个文件中,提高了运行性能。DX工具还会对.dex文件进行一些性能的优化 。
b,大多数虚拟机(包括JVM
)都是基于栈的,Dalvik基于寄存器的。具有更好的性能表现,在硬件上的通用性略差。
(4)Dalvik虚拟机依赖于Linux内核提供的核心功能,如线程和底层内存管理。
5, Linux 内核
Android建立在Linux2.6之上。提供了安全性,内存管理,进程管理,网络协议栈和驱动模型等核心系统服务。
二, Android Debug Bridge (ADB) 的用法
adb工具在platform-tools目录下,有以下功能:
(1) 查看当前运行的模拟器: adb -devices
(2)电脑与手机之间的文件的相互复制:
电脑到模拟器 adb push d:/abc.txt /sdcard/ 模拟器到电脑 adb pull /sdcard/mp3.txt d:/
(3)启动模拟器的shell窗口:
打开shell窗口执行 linux命令 adb shell
三, Android应用的清单文件:AndroidManifest.xml
Android应用程序的全局描述文件,包含了:
1, 应用程序的包名,该包名会作为应用的唯一标识。(package的值)
2,应用程序所包含的组件,如Activity,Service,BroadcastReceiver和Provider等
3,应用程序兼容的最低版本
4,应用程序使用系统所需的权限声明
5,其他应用访问该程序所需的权限声明
(应用本身所需的权限 在<manifest />里面添加 <user-permission/> 调用该应用所需的权限在 <activity/>里面添加<user-permission/>)
四,Android应用的基本组件介绍
1,Activity和View:
(1) Activity是android中负责与用户交互的组件,只能通过setContentView(View)来显示指定的组件。
(2)View组件是所以UI控件,容器控件的基类,就是用户能实实在在看到的部分。需要放到容器组件中,或者在activity显示出来
如果应用需要多个用户界面,那么应用将会包含多个Activity,多个Activity组成Activity栈,当前活动的Activty位于栈顶。
2, Service :
Service通常位于后台运行,没有图形用户界面。一个Service组件被运行起来之后,拥有自己独立的生命周期。
通常为其他组件提供后台服务或监控其他组件的运行状态。
3, BroadcastReceiver : 广播消息接收器
BroadcastReceiver类似于 监听器。(实现BroadcastReceiver子类,实现onReciver()方法)
普通监听器监听的事件源是程序中的对象,而BroadcastReceiver监听的事件源是Android应用中其他组件。
4,ContentProvider
Android系统为跨应用的数据交换提供了一个标准: ContentProvider(如发送短信时读取联系人里面的数据)
ContentProvider 与 ContentResolver结合使用。一个应用通过ContentProvider暴露自己的数据,另一个应用程序通过ContentResolver
来访问数据。
需要实现: insert(Uri,ContentValues),delete,update,query等方法
5, Intent 和 IntentFilter
严格来说Intent不是Android应用的组件,但是它是Android应用内不同组件之间的载体。
Intent可以启动应用另一个Activity,也可以启动一个Service组件,还可以发送一条广播消息触发系统中的BroadcastReciver
(1)启动Activity: 调用Context的startActivity(Intent intent) 或 startActivityForResult(Intent intent,int requestCode)
(2)启动Service : 调用Context的startService(Intent intent) 或 bindService(Intent service,ServiceConnection conn,int flags)
(3)触发BroadcastReciver:调用Context的sendBroadcast(Intent intent) 或 sendStickyBroadcast(Intent intent) 或 sentOrderedBroadcast(Intent intent, String reciverPermission)
intent分为显
式和隐式
五,Android应用程序签名
签名的作用:
(1) 确定发布者的身份。由于应用的开发者可以通过使用相同的包名来替换已经安装的程序,使用签名和避免这种情况发生。
(2)确保应用的完整性。签名会对应用包中的每个文件进行处理,确保程序包中文件不会被替换。