Android-Framework(1)

Android-Framework(1)

Android架构

在这里插入图片描述
Android架构主要分为四部分,从下往上分别为 LINUX KERNEL(内核层)LIBRARES(共享库,以及android运行库)APPLICATION FRAMEWORK(应用框架层)APPLICATION(应用程序)

APPLICATION(应用层)

主要为系统中的应用,如 桌面、闹铃、设置、日历、电话、短信等系统应用

APPLICATION FRAMEWORK(框架层)

Android的应用程序框架为应用程序层的开发者提供APIs它实际上是一个应用程序的框架。由于上层的应用程序是以java搭建的,因此本层提供了一下服务:

  • 丰富而又可扩建的视图(Views),可以用来构建应用程序,它包括列表(lists)、网络(grids)、文本框(text boxes)、按钮(buttons),甚至可嵌入的web浏览器;
  • 内容提供其(ContentProviders)使得应用程序可以访问另一个应用程序的数据(比如联系人数据库),或者共享他们自己的数据;
  • 资源管理器(Resource Manager)提供非代码资源的访问,比如本地字符串、图形、和布局文件(layout files);
  • 通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自定义的提示信息;
  • 活动管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能
Android Runtime(运行层)

Android包括了一个核心库,该核心库提供了JAVA编译语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式针对小内存做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中的“dx”工具转化成 .dex 格式有虚拟机执行。Dalvik虚拟机依赖于Linux内核的一些功能。比如线程机制与底层内存管理机制

Libraries(包层)

Android 包含一些C/C++ 库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务,以下是一些核心库:

  • 系统C库:一个从BSD继承来的标准C系统函数库(libc),它是专门基于 embedded linux的设备定制的
  • 媒体库:基于 PacktVideo OpenCORE。该库支持各种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括 MPEG4,H.264,MP3,AAC,AMR,JPG,PNG
  • Surface Manager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合
  • LibWebCore:一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图
  • SGL:底层的2D图形引擎
  • 3D libraties:基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。
  • FreeType:位图(bitmap)和矢量(vector)字体显示
  • SQLite:一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎
Linux Kernel(内核层)

Android 的核心系统服务依赖于Linux内核,安全性,内存管理,进程管理,网络协议和驱动模型。Linux内核也同时作为硬件和软件栈之间的抽象层

FrameWork简介

在这里插入图片描述

系统服务

SystemServer 是 framework中非常重要的进程,它是在虚拟机启动后运行的第一个java进程,SystemServer启动其他系统服务,这些系统服务都是以一个线程的方式存在于SystemServer进程中

a) EntropyService 提供伪随机数

b) PowerManagerService 电源管理服务

c) ActivityManagerService 最核心的服务之一,管理Activity

d) TelephonyRegistry 通过该服务注册电话模块的事件响应,比如重启、关闭、启动等

e) PackageManagerService 程序包管理服务

f) AccountManagerService 账户管理服务,是指联系人账户,而不是Linux系统的账户

g) ContentService ContentProvider服务,提供跨进程数据交换

h) BatteryService 电池管理服务

i) LightsService 自然光强度感应传感器服务

j) VibratorService 震动器服务

k) AlarmManagerService 定时器管理服务,提供定时提醒服务

l) WindowManagerService Framework最核心的服务之一,负责窗口管理

m) BluetoothService 蓝牙服务

n) DevicePolicyManagerService 提供一些系统级别的设置及属性

o) StatusBarManagerService 状态栏管理服务

p) ClipboardService 系统剪切板服务

q) InputMethodManagerService 输入法管理服务

r) NetStatService 网络状态服务

s) NetworkManagementService 网络管理服务

t) ConnectivityService 网络连接管理服务

u) AccessibilityManagerService 辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果

v) MountService 挂载服务,可通过该服务调用Linux层面的mount程序

w) NotificationManagerService 通知栏管理服务,Android中的通知栏和状态栏在一起,只是界面上前者在左边,后者在右边

x) DeviceStorageMonitorService 磁盘空间状态检测服务

y) LocationManagerService 地理位置服务

z) SearchManagerService 搜索管理服务

aa) DropBoxManagerService 通过该服务访问Linux层面的Dropbox程序

ab) WallpaperManagerService 墙纸管理服务,墙纸不等同于桌面背景,在View系统内部,墙纸可以作为任何窗口的背景

ac) AudioService 音频管理服务

ad) BackupManagerService 系统备份服务

ae) AppWidgetService Widget服务

af) RecognitionManagerService 身份识别服务

ag) DiskStatsService 磁盘统计服务

核心服务介绍

1)ActivityManagerService
ActivityManagerService(以下简称:AMS)是android系统的一个系统服务,是应用进程的管理服务端,直接的控制了应用进程的各个行为,保证了系统中不同的应用程序之间能够和谐的合理的进行调度运行。
AMS是android上层系统最核心的模块之一,其主要的工作是对所有的应用进程及其进程中的四大组件进行管理。(当然这里也涉及了一些window、电源、权限等内容)

对进程的管理包括:进程的创建与销毁、进程的优先级调整

对组件的管理包括:Activity的调度管理、Service的管理、Broadcast的分发、以及ContentProvider管理

在这里插入图片描述

2)WindowManagerService
对系统中所有窗口进行管理、动画处理、input分发及处理、Display管理(多屏显示)

3)Android Graphics(绘图)系统
在这里插入图片描述
4)Surfaceflinger
负责Layer合成(composer);创建surface;管理surface

5)PackageManagerService
负责Package管理,应用程序的安装、卸载、信息查询等
在这里插入图片描述

6)Input系统
android的输入系统主要完成键盘、触屏、鼠标等输入设备的时间输入及向焦点窗口和焦点视图的事件派发、插入、过滤、拦截等功能。

android支持的输入设备主要有:键盘、鼠标、触摸屏、轨迹球、游戏摇杆/手柄、绘图板

在这里插入图片描述

Framework的范围

Framework负责 APPLICATION FRAMEWORK、ANDROID RUNTIME和LIBRARIES三部分
Framework负责APPLICATION FRAMEWORK、ANDROID RUNTIME和LIBRARIES三部分。

a) 系统Manager和Service相关内容

b) 系统接口和jni相关内容

c) 系统功能相关内容(watchdog、vold、binder等)

d) 虚拟机dalvik、art

e) 系统so库相关内容

f) CTS、GTS等预分析

g) Monkey预分析

h) 系统稳定性问题(系统ANR、冻屏、重启、蓝屏等)

i) 系统性能问题

FrameWork基础

语言基础:java、C++、C
技术基础:进程间通信、多线程、jni、linux相关知识、binder

Linux入门介绍

Android代码管理

代码结构

faramework开发工作方式与应用开发的工作方式吃完全不同的,framework开发是基于Android源代码进行的开发,版本管理需要使用:git,repo两种工具。

Android源码结构:

├── bionic    android上实现的libc库
├── bootable  存放可启动项,如recovery、bootloader等
├── build     android编译系统所用到的make文件及其它工具
├── cts       android兼容性测试
├── dalvik    dalvik虚拟机
├── development  与开发相关的一些东西
├── device    存放需要适配的设备信息
├── external  第三方库
├── frameworks  framework部分
├── hardware  硬件相关代码
├── kernel    kernel相关代码
├── libcore   android上实现的Java基础库
├── Makefile
├── ndk
├── out       编译输出目录
├── packages  包含系统应用、壁纸应用、内容提供者、输入法等
├── prebuilt  预编译好的工具
├── sdk       sdk相关内容
├── system    操作系统层次的一些可执行程序和配置文件
├── u-boot    用于引导linux启动的u-boot
└── vendor    存放与厂商相关的信息,也可粗放需要适配的设备信息

而framework开发主要了解的是framework下面的内容。

代码编译

当把代码下载完毕后,需要对源代码整体进行编译,具体方法如下:
1、source build/envsetup.sh
读取各个board的vendorsetup.sh
2、lunch
去选择要编译的对象
3、完整系统编译、输出到out/target/product/<device/…
make -j4 (j4为使用四个线程同时编译)
4、如果要单编译某个模块,就是用如下命令来编译需要的模块
编译bootoader —> make bootoader
编译kernel生成boot.img —> make bootimage
编译system生成system.img —> make systemimage
编译userdata生成userdata.img —> make userdataimage
编译recovery生成recovery.img —> make recoveryimage

当编译好对应的image后,可以使用fastboot将image烧到手机里面:
如何进入fastboot:
开机状态下执行adb reboot bootloader
关机状态组合键:home+power

(1)检查连接设备 —> Fastboot devices
(2)烧写system.img —> Fastboot flash system system.img
(3)烧写boot.img(recovery.img) —> fastboot flash boot boot.img
(4)烧写bootloader —> Fastboot flash 2ndbl u-boot.bin

常用工具及调试方法

Framework工具及调试方法

Android启动流程分析

根据上文分析Android分为四个层次,而系统如何从长按power开机进入系统桌面的呢,系统都进过了哪些流程,framework从中起到了什么的作用,请参考之前的Android启动流程系列文章

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值