Android Framework入门介绍

Android Framework入门介绍framework 概述 Android 简介 nbsp nbsp nbsp Android 是一种基于 Linux 的自由及开放源代码的操作系统 主要使用于移动设备 如智能手机和平板电脑 由 Google 公司和开放手机联盟领导及开发 Android 操作系统最初由 Andy nbsp Rubin 开发 主要支持手机 2005 年 8 月由 Google 收购注资 2007 年 11 月 Google 与 84 家硬件制造商 软件开发商及电信营运商组建开放手机联盟共同

framework概述

Android简介

      Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。20058月由Google收购注资。200711月,Google84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良 Android系统,随后GoogleApache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008 10,随后,Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%

     开发者能使用Android SDK为Android platform开发应用,这些应用使用JAVA语言书写,运行在虚拟机(一个专为手机程序开发的基于linux内核的JAVA虚拟机)上。 

Android架构

Android Framework入门介绍

        Android架构主要分为分为四部分,从下往上以此为LINUX KERNEL(内核层),LIBRARIES(共享库,以及android运行时库),APPLICATION FRAMEWORK(应用框架层),APPLICATION(应用程序)。而本文主要分析就是APPLICATION FRAMEWORK(应用框架层)。

  APPLICATION

  APPLICATION FRAMEWORK

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

i. 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器;

ii. 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据;

iii. 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layout files );

iv. 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息;

v. 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。

 Android Runtime

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

 Libraries

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

i. 系统 C 库:一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。

ii. 媒体库:基于 PacketVideo OpenCORE。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。

iii. Surface Manager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。

iv. LibWebCore:一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。

v. SGL:底层的2D图形引擎

vi. 3D libraries:基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。

vii. FreeType:位图(bitmap)和矢量(vector)字体显示。

SQLite:一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

 Linux Kernel

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

framework简介

Android 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 磁盘统计服务

核心服务介绍

a) ActivityManagerService

ActivityManagerService(以下简称:AMS)是android系统的一个系统服务,是应用进程的管理服务端,直接的控制了应用程序的各个行为,保证了系统中不同的应用程序之间能够和谐的合理的进行调度运行。

AMS是android上层系统最核心的模块之一,其主要的工作是对所有的应用进程及其进程中的四大组件进行管理。(当然这里面也涉及了一些window、电源、权限等内容)

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

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

                             
Android Framework入门介绍

b) WindowManagerService

对系统中所有窗口进行管理;动画处理 ;Input分发、处理;Display管理(多屏显示) 。

c) Android Graphics系统

                  Android Framework入门介绍

a) Surfaceflinger

负责Layer合成(composer);创建surface;管理surface。

b) PackageManagerService

负责Package的管理,应用程序的安装 、卸载、信息查询等。

                                     Android Framework入门介绍

c) Input系统

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

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

Android Framework入门介绍

Framework的范围

Framework负责APPLICATION FRAMEWORKANDROID RUNTIMELIBRARIES三部分。

a) 系统ManagerService相关内容

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

c) 系统功能相关内容(watchdogvoldbinder等)

d) 虚拟机dalvikart

e) 系统so库相关内容

f) CTSGTS等预分析

g) Monkey预分析

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

i) 系统性能问题

framework基础

语言基础:JavaC++C

技术基础:进程间通信,多线程,jnilinux相关知识,binder

Linux入门介绍

    由于在进行framework工作时,代码的下载和管理主要在Ubuntu下面进行比较方便,所以在搞framework之前需要对linux系统有所了解,会使用一些常用命令。linux是基于
shell命令行操作,shell是系统的一个工具。用户直接面对的不是计算机硬件而是shell,用户想操作计算机硬件,需先把指令告诉shell,shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。

Android Framework入门介绍

启动shell界面,快捷键Ctrl+Atl+t或者可以点击桌面左上角的图标进行搜索“终端”如下图,点击终端就可以出现shell终端。

Android Framework入门介绍

      当启动一个shell时,默认目录为/home/username/:可以使用pwd来查看当前的目录。

Android Framework入门介绍

      当系统第一次启动,且能连上internet,先更新系统的软件库信息,使用命令sudo apt-get update,sudo为使用管理员权限,第一次执行时需要输入系统的开机密码,之后五分钟内不需要输入密码,过了五分钟需要再次输入密码。

Android Framework入门介绍

    等更新完成后,就可以开始安装软件了,例:安装git,可以sudo apt-get install git进行安装,非常简便。install是安装系统中存在安装包的软件。

Android Framework入门介绍

如果我们从网上下载一个deb的软件包sudo dpkg -i .deb软件包

Android Framework入门介绍

命令:sudo dpkg -i xxx.deb,安装xxx软件包与apt-get install 安装方式的区别:

dpkg方式
apt-get install方式
手动下载deb软件包 自动下载deb软件包
手动指定软件包下载路径 自动下载到/var/cache/apt/archive/下
手动执行sudo dpkg -i xxx.deb安装 自动执行dpkg安装命令

一般在做framework开发时都会有一个代码服务器专门放置一些系统源码,而该服务器是没有显示器的,我们只能远程登录到服务器上进行查看代码,这时就需要安装远程终端访问软件:ssh

安装方法:sudo apt-get install openssh-server

用法:ssh username@ip

Android Framework入门介绍

当我们想从服务器copy文件到我们本地,我们可以使用scp命令:scp username@ip:/文件位置,

或者scp -r username@ip:/文件夹位置,就可以轻松复制文件,同理也可以将本地文件copy到服务器。

Android Framework入门介绍

LINUX常用命令请查看博客(Linux常用命令)

Android代码管理

代码结构

      framework开发工作方式与应用开发的工作方式是完全不同的,framework开发是基于Android源代码进行的开发,版本管理主要使用:git,repo两种工具。如果想要学习framework开发,必须需要下载一套Android源码。官方下载地址【参考、需翻墙】: https://source.android.com/source/downloading.html,具体的下载编译调试代码的方式可以参考老罗的博客视频,讲解的非常清楚,附上地址(http://0xcc0xcd.com/p/index.php),感谢老罗。

    当下载完成代码后首先了解一下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开发主要要了解的就是frameworks下面的内容。

代码编译

当把代码下载完毕后需要对源代码整体进行编译,具体方法如下:

3.完整系统编译,输出到out/target/product//…

      make -j4(j4为使用四个线程同时编译)

4.如果要单编某个模块,就是用如下命令来编译需要的模块。

   编译bootloader,
      make bootloader
   编译kernel生成boot.img,
      make bootimage
   编译system生成system.img,
      make systemimage
   编译userdata生成userdata.img,
      make userdataimage
   编译recovery生成recovery.img,

      make recoveryimage

当编译好对应的image后,可以使用fastboot将image烧到手机里面:

    Fastboot flash 2ndbl u-boot.bin

常用工具以及调试方法

详细参考Framework工具及调试方法

Android启动流程分析

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




















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228992.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午5:43
下一篇 2026年3月16日 下午5:43


相关推荐

  • 常数变易法的原理解释_微分方程常数变易法

    常数变易法的原理解释_微分方程常数变易法高数看到常数变易法,不懂为什么要把C变成u,看了篇文章,感觉懂了转载自http://www.cnblogs.com/lookof/archive/2009/01/06/1370065.html注:本方法是对崔士襄教授写的《“常数变易法”来历的探讨》论文的解释。思路并非本人原创。特此注明。背景详见本人前一篇博文。      我们来看下面的式子:

    2025年8月2日
    6
  • rebar3使用介绍(四)依赖

    rebar3使用介绍(四)依赖rebar3 使用介绍 四 依赖声明依赖关系源依赖包依赖 Checkout 依赖更新依赖锁文件 LockFile 依赖锁管理依赖关系和配置文件将始终使用 prod 应用于其配置的配置文件编译依赖项 没有其他 default 当然 除此之外 用于任何依赖 即使它们是为 prod 依赖项配置的 仍然会将其提取到其声明的配置文件的配置文件目录中 例如 顶层的依赖 deps 将存放在 build default li

    2026年3月18日
    2
  • 辛星解读mysql的用户管理

    辛星解读mysql的用户管理

    2022年1月30日
    47
  • ip2long与long2IP 分析

    ip2long与long2IP 分析

    2021年10月18日
    47
  • Tree命令的下载与使用「建议收藏」

    Tree命令的下载与使用「建议收藏」**Tree命令的下载与使用**前言作为一名Linux小白,今天第一次发博客,决定把我今天下载Linux中tree命令的过程记录下来,先来讲一讲我是怎么碰见tree这个命令的吧,今日看书时,无意中翻到tree这个命令得知这个命令可以以树状图列出目录结构,于是我便创建了一个名为aaa的文件夹和一个叫123的文件,并且复制了123文件(123复件),将123文件和123复件移进aaa文件夹,在…

    2022年7月24日
    40
  • opencv教程菜鸟教程_vs opencv

    opencv教程菜鸟教程_vs opencv本教程旨在搬运官方OpenCVTutorials目的有三:一是系统学习OpenCV函数的使用;二是学习系统的教程书写规范;三是学习OpenCV框架系统的底层设计及实现。下面的链接描述了一组基本的OpenCV教程。这里提到的所有源代码都是作为OpenCV常规发行版的一部分提供的,所以在开始复制和粘贴代码之前要进行检查。下面的教程列表是根据GIT存储库中的reST文件自动生成的。OpenCV概述您将学习如何在计算机上安装OpenCV核心功能(core模块)在这里,您将了解这个库的基.

    2022年10月3日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号