1.一张安卓系统架构的经典示意图:
Linux层:包含Android系统的核心服务,包括硬件驱动,进程管理,安全系统,等等
Dalvik与ART:Dalvik包含一整套的Android运行环境虚拟机,每个APP都会分配Dalvik虚拟机来保证互相之间不受干扰,并保持独立.从Android5.X开始,就用ART模式取代Dalvik了,其中Dalvik是运行时编译,而ART是 安装时编译.当然,对在其虚拟机环境运行的大部分APP来说,它们都运行着同样的代码,只是编译时机不同.
Framework层:书上没怎么说,那我也不会怎么说...就知道深入研究安卓设计的时候,就是跟这堆东西打交道
Standard libraries:这里包含的是Android中的一些标准库,所谓标准,就是开源环境中可以被开发者使用的开发库
Application:其中Application主要由NDK开发和Java开发的APP构成.所有的APP都必须有Android Manifest,Dalvik Classes,Resource Bundle几个文件.
2.Android App组件架构
四大组件:Activity,BroadCastReceiver,ContentProvider,Service.
Activity:作为人机交互的第一界面,用来向用户展示信息和处理结果.
BroadCastReceiver:可通过广播形式给Activity,Service传递数据
ContentProvider:从其他应用获取数据,交给该App自己处理
Service:处理一些后台的业务逻辑,例如下载,计算,处理等
还要说的就是Intent,它是一个数据的载体,使数据可以在各个组件,各种组件之间传递信息,交换数据.在各个组件通信中起着必不可少的作用.
3.上下文对象Context:什么是上下文?以前我们老师常说的请联系上下文,大概就是一个语境的意思.那么Android的上下文可以理解为对象所处的一个环境,一个与系统较好的过程.其中Activity,Service,Application都是继承自Context.Android会在下面的时机创建一个Context:
1.创建Application
2.创建Activity
3.创建Service
其实,每当创建Context的实现类的时候就会创建Context...每个程序都会有一个Application对象,即是有一个Application Context.所有的Activity和Service都会共用这个Context,这个Context贯穿整个应用的生命周期.为全局提供了功能和环境支持.而当创建Activity和Service的时候,系统也会创建Context.在Activity获取Context的时候可以传入this参数,因为Activity本身就是继承自Context,但是在内部类需要使用XXX.this来指定对象.很多时候也可以使用getApplicationContext()获取全局ApplicationContext去作为传输传递.但是Application Context和某个组件的Context在一些时候还是有区别的.
4.Android系统源代码目录与系统目录:
1.Android源代码目录:(AOSP的为例子,一些芯片厂商的另当别论)
|-- Makefile
|-- bionic (bionic C库)
|-- bootable (启动引导相关代码)
|-- build (存放系统编译规则及generic等基础开发包配置)
|-- cts (Android兼容性测试套件标准)
|-- dalvik (dalvik JAVA虚拟机)
|-- development (应用程序开发相关)
|-- external (android使用的一些开源的模组)
|-- frameworks (核心框架——java及C++语言)
|-- hardware (部分厂家开源的硬解适配层HAL代码)
|-- out (编译完成后的代码输出与此目录)
|-- packages (应用程序包)
|-- prebuilt (x86和arm架构下预编译的一些资源)
|-- sdk (sdk及模拟器)
|-- system (底层文件系统库、应用及组件——C语言)
`-- vendor (厂商定制代码)
可以看出,Android源代码编译是使用Makefile来管理的
2.Android系统目录:(主要是/system和/data)
/system/app:存放App
/system/bin:Linux自带的组件,一些基础命令
/system/build.prop:记录系统的属性信息
/system/fonts:存放系统字体,root后下载TTF格式字体替换原字体就达到修改系统字体效果
/system/framework:系统的核心文件 框架层
/system/lib:存放几乎所有的共享库(.so)
/system/media:存放系统默认的媒体文件
alarms:闹铃声音
notification:短信或提示音
ringtones:来对待你铃声
ui:存放界面的声音
/system/usr:存放用户配置文件,如键盘布局 共享 时区文件等
/data/app:系统安装或者升级的app
/data/data:开发者接触最多的,存放一些app的配置 数据 文件等信息.以包名命名
/data/system:包含手机的系统信息
/data/misc:存放大部分的WiFi VPN信息