一、Android系统架构
这是Android系统架构的中文版示意图,它将Android大致分为了四层,底层到外层依次是Linux内核层、库和运行时、Framework层和应用层,这些层次既相互独立,又相互关联。
1、Linux层——是Android最底层最核心部分,它包含了Android系统的核心服务,包括硬件驱动、进程管理、安全系统等。打开手机设置——关于手机,就可以先到手机的内核版本。
2、库和运行时——库是指开发者在开源环境中可以使用的开发库,Android系统运行时需要用到核心库和Dalvik虚拟机,Dalvik包含了一整套Android运行环境虚拟机,每个APP都会分配Dalvik虚拟机来保证互相之间不受干扰,它是在运行时编译。现在ART模式已经取代了Dalvik,ART采用的是安装时就进行编译,运行时不再编译。
3、Framework层——包括活动管理器、窗口管理器、内容提供器、视图系统、通知管理器、包管理器、电话管理器、资源管理器、位置管理器、xmpp服务等,在这里我只想说,如果要走Android开发高级进阶,Framework一定是你绕不开的道,你一定会时常与他打交道。
4、应用层——应用层包括使用NDK开发的App和使用Java开发的App。
Android系统架构不是一张图我们就能理解清楚的,但是随着学习的深入和实践的累积,逐渐的,我们一定会对Android系统架构有更深刻和透彻的理解。
二 、Android App组件架构
在Android系统架构中的应用层,最重要的知识点要数App组件架构了,就是我们常说的Android四大组件:Activity、BroadCast Reciever、Content Provider、Service,通常学完这四大组件,你就算是Android初级开发者了。
1、Android四大组件如何协同工作
Activity是用户可以直接看到的,负责向用户展示信息和处理结果,如果需要用到其他应用的信息或者共享本App的信息,就使用到了Content Provider,当App需要在后台执行任务,比如下载任务时,就用到了Service,如果App需要在内部Activity内传递消息或者给别的应用发送和接收消息或者给用户提示信息时,就用到了BroadCast Reciever广播接收器。Android系统提供了一个信使——Intent,作为信息传递的载体。组件与组件之间通过它来通信、传递信息、交换数据,使四大组件各自独立又紧密联系。
2、应用运行上下文对象
Android系统的上下文对象即Context,我们可以把它理解为当前对象在程序中所处的一个环境。Application、Activity、Service都继承自Context,所以当应用程序第一次启动时,系统会创建一个Application对象,同时创建Application Context,所有组件都共同拥有这样一个Context对象;在创建Activity和Service组件时,系统也会给他们提供创建Activity实例、Service实例的Context对象,所以比如在Activity中获取Context对象时,可以直接使用this,在匿名类中要指定XXXActivity.this。注意通过getApplicationContext()方法获取的是整个APP的Context。
三、Android系统源代码目录与系统目录
1、Android系统源代码目录
查看Android源代码的网站:http://androidxref.com/
其中,bionic——bionic C库,bootable——启动引导相关代码,build——存放系统编译规则等基础开发包配置,cts——Google兼容性测试标准,dalvik——dalvik虚拟机,development——应用程序开发相关,external——android使用的一些开源的模块,packages——应用程序包,prebulit——x86和arm架构下预编译资源,sdk——sdk及模拟器,system——底层文件系统库、应用及组件。
并不是所有的源代码结构都是这样。Eclipse、Android Studio都属于开发IDE,即集成开发环境,简化计算机与开发者的交互,但很多事IDE是无法完成的,比如自动化编译、定制编译、版本控制、自动测试等,因此Android引入了Makefile机制,它可以将源文件按其类型功能或者模块放置在不同的目录中,然后定义一系列规则来指定模块或者文件进行编译。它最大的好处就在于可以进行自动化编译,同时还可以做到可控制的编译 。
2、Android系统目录
Android手机中的系统目录与源代码目录结构还是有所不同的。
1)/system/app/ 这里放的是系统中安装的App
2)/system/bin/ 这里记录的是系统的属性信息
3)/system/fonts/ 字体
4)/system/framework/ 系统的核心文件、框架层
5)/system/lib/ 存放几乎所有的共享库(.so)文件
6) /system/media/ 保存铃声之类的声音文件
/system/media/audio/目录中保存着Android系统默认的铃声
alarms目录是闹铃提醒,notification目录是短信或提示音,ringtones目录是来电铃声,ui目录是一些界面音效。
7)/system/user/ 用来保存用户的配置文件,如键盘布局、共享、时区文件等。
8)/system/build.prop 记录的是系统的属性信息
data目录包含了用户的大部分数据信息
9)/data/app/ 包含了用户安装的App或者升级的App
10)/data/data/ 包含了了App的数据信息、文件信息、数据库信息等,以包名的方式来区分各个应用。
11)/data/system/ 包含了手机的各项系统信息
12)/data/misc/ 保存了大部分的Wi-Fi、VPN信息
3、Android App文件目录
Android Studio中的Project就相当于Eclipse里面的Workspace,而Android Studio中的Module就相当于Eclipse里的Project。