(转)android系统架构及源码目录结构
转自:http://blog.csdn.net/finewind/article/details/46324507
1. Android系统架构:
android系统架构采用了分层架构的思想,如下图所示,从上到下共4层,分别为:应用程序层、应用程序框架层、系统库和android运行时层、linux内核层。
每层功能简要介绍如下:
应用程序层(JAVA应用程序):
该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处。
应用程序框架层(JAVA框架):
该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。
系统库和android运行时层(本地框架和JAVA运行环境):
系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。
Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.net、android.media等等。后者是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。
LINUX内核层:
Android核心系统服务依赖于Linux内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。
驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、Binder(IPC)驱动、电源管理等。
2. android源码目录结构:
- Android 5.1
- |-- Makefile
- |-- abi
- |-- art
- |-- bionic (bionic C库)
- |-- bootable (启动引导相关代码)
- |-- build (存放系统编译规则及generic等基础开发包配置)
- |-- cts (Android兼容性测试套件标准)
- |-- dalvik (dalvik JAVA虚拟机)
- |-- developers
- |-- development (应用程序开发相关)
- |-- device
- |-- docs
- |-- external (android使用的一些开源的模组)
- |-- frameworks (核心框架——java及C++语言)
- |-- hardware (部分厂家开源的硬解适配层HAL代码)
- |-- kernel
- |-- libcore
- |-- libnativehelper
- |-- ndk
- |-- out (编译完成后的代码输出与此目录)
- |-- packages (应用程序包)
- |-- pdk
- |-- prebuilts (x86和arm架构下预编译的一些资源)
- |-- sdk (sdk及模拟器)
- |-- system (底层文件系统库、应用及组件——C语言)
- |-- tools
- `-- vendor (厂商定制代码)
- bionic 目录
- |-- benchmarks
- |-- libc (C库)
- | |-- arch-arm (ARM架构,包含系统调用汇编实现)
- | |-- ...
- | |-- bionic (由C实现的功能,架构无关)
- | |-- dns
- | |-- include (头文件)
- | |-- kernel (Linux内核中的一些头文件)
- | |-- private (?一些私有的头文件)
- | |-- stdio (stdio实现)
- | |-- tools (几个工具)
- | |-- tzcode (时区相关代码)
- | |-- upstream-dlmalloc
- | |-- upstream-freebsd
- | |-- upstream-netbsd
- | |-- upstream-openbsd
- | `-- zoneinfo (时区信息)
- |-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)
- |-- libm (libm数学库的实现,)
- |-- libstdc++ (libstdc++ C++实现库)
- |-- linker (动态链接器)
- `-- test
- bootable 目录
- |-- bootloader (适合各种bootloader的通用代码)
- | |-- legacy (估计不能直接使用,可以参考)
- | `-- lk
- `-- recovery (系统恢复相关)
- | |-- edify (升级脚本使用的edify脚本语言)
- | |-- etc (init.rc恢复脚本)
- | |-- minui (一个简单的UI)
- | |-- minzip (一个简单的压缩工具)
- | |-- mtdutils (mtd工具)
- | |-- res (资源)
- | |-- tools (工具)
- | | `-- ota (OTA Over The Air Updates升级工具)
- | `-- updater (升级器)
- build目录
- |-- core (核心编译规则)
- |-- libs
- | `-- host (主机端库,有android “cp”功能替换)
- |-- target (目标机编译对象)
- | |-- board (开发平台)
- | |-- product (开发平台对应的编译规则)
- `-- tools (编译中主机使用的工具及脚本)
- dalvik目录 dalvik虚拟机
- |-- dexdump (dex反汇编)
- |-- dexgen
- |-- dexlist (List all methods in all concrete classes in a DEX file.)
- |-- docs (文档)
- |-- dx (dx工具,将多个java转换为dex)
- |-- hit (?java语言写成)
- |-- opcode-gen
- |-- tools (工具)
- `-- vm (虚拟机实现)
- development 目录 (开发者需要的一些例程及工具)
- |-- apps (一些核心应用程序)
- | |-- BluetoothDebug (蓝牙调试程序)
- | |-- CustomLocale (自定义区域设置)
- | |-- Development (开发)
- | |-- Fallback (和语言相关的一个程序)
- | |-- FontLab (字库)
- | |-- GestureBuilder (手势动作)
- | |-- NinePatchLab (?)
- | |-- OBJViewer (OBJ查看器)
- | |-- SdkSetup (SDK安装器)
- | |-- SpareParts (高级设置)
- | |-- Term (远程登录)
- | `-- launchperf (?)
- |-- build (编译脚本模板)
- |-- cmds (有个monkey工具)
- |-- docs (文档)
- |-- host (主机端USB驱动等)
- |-- ide (集成开发环境)
- |-- libraries
- |-- ndk (本地开发套件——c语言开发套件)
- |-- samples (例程)
- | |-- AliasActivity (?)
- | |-- ApiDemos (API演示程序)
- | |-- BluetoothChat (蓝牙聊天)
- | |-- BrowserPlugin (浏览器插件)
- | |-- BusinessCard (商业卡)
- | |-- Compass (指南针)
- | |-- ContactManager (联系人管理器)
- | |-- CubeLiveWallpaper (动态壁纸的一个简单例程)
- | |-- FixedGridLayout (像是布局)
- | |-- GlobalTime (全球时间)
- | |-- HelloActivity (Hello)
- | |-- Home (Home)
- | |-- JetBoy (jetBoy游戏)
- | |-- LunarLander (貌似又是一个游戏)
- | |-- MailSync (邮件同步)
- | |-- MultiResolution (多分辨率)
- | |-- MySampleRss (RSS)
- | |-- NotePad (记事本)
- | |-- RSSReader (RSS阅读器)
- | |-- SearchableDictionary (目录搜索)
- | |-- SimpleJNI (JNI例程)
- | |-- SkeletonApp (空壳APP)
- | |-- Snake (snake程序)
- | |-- SoftKeyboard (软键盘)
- | |-- Wiktionary (?维基)
- | `-- WiktionarySimple(?维基例程)
- |-- scripts (脚本)
- |-- sdk (sdk配置)
- |-- sdk_overlay
- |-- sys-img
- |-- testrunner (?测试用)
- |-- tools (一些工具)
- `-- tutorials
- external 目录
- |-- apache-http (网页服务器)
- |-- bison (自动生成语法分析器,将无关文法转换成C、C++)
- |-- blktrace (blktrace is a block layer IO tracing mechanism)
- |-- bluetooth (蓝牙相关、协议栈)
- |-- bsdiff (diff工具)
- |-- bzip2 (压缩工具)
- |-- dhcpcd (DHCP服务)
- |-- e2fsprogs (EXT2文件系统工具)
- |-- elfcopy (复制ELF的工具)
- |-- elfutils (ELF工具)
- |-- embunit (Embedded Unit Project)
- |-- emma (java代码覆盖率统计工具)
- |-- esd (Enlightened Sound Daemon,将多种音频流混合在一个设备上播放)
- |-- expat (Expat is a stream-oriented XML parser.)
- |-- fdlibm (FDLIBM (Freely Distributable LIBM))
参考资料:
android系统架构: http://blog.csdn.net/wangloveall/article/details/8033725
android源码结构: http://www.cnblogs.com/shaweng/p/4043573.html
(转)android系统架构及源码目录结构的更多相关文章
- Android 5.1.1 源码目录结构
点击打开链接 最近公司培训新同事,我负责整理一点关于android的基础知识,遥想当年,刚接触android,也是一头雾水, 啥都不懂,就是靠看文档和视频,对android有一个初步了解,然后就通过查 ...
- (转)Android 5.1.1 源码目录结构
转自:http://blog.csdn.net/tfslovexizi/article/details/51888458最近公司培训新同事,我负责整理一点关于android的基础知识,遥想当年,刚接触 ...
- 【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介
前言 古人常说,“熟读唐诗三百首,不会作诗也会吟”,说明了大量阅读诗歌名篇对学习作诗有非常大的帮助.做开发也一样,Android源码是全世界最优秀的Android工程师编写的代码,也是A ...
- 点菜网---Java开源生鲜电商平台-系统架构图(源码可下载)
点菜网---Java开源生鲜电商平台-系统架构图(源码可下载) 1.点菜网-生鲜电商平台的价值与定位. 生鲜电商平台是一家致力于打造全国餐饮行业智能化.便利化.平台化与透明化服务的创新型移动互联网平台 ...
- chromium浏览器开发系列第三篇:chromium源码目录结构
上两篇介绍了下载源码和编译源码,这次主要介绍chromium的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流. 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠 ...
- InfluxDB源码目录结构解析
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 influxdata主目录结构 [root@localhost ...
- (3.1)mysql基础深入——mysql二进制与源码目录结构介绍
(3.1)mysql基础深入——mysql二进制与源码目录结构介绍 关键字:二进制目录结构,源码目录结构(编译安装目录结构) 1.二进制安装程序目录结构 [1] BIN -- mysql的可执行文件( ...
- Linux基础系列—Linux内核源码目录结构
/** ****************************************************************************** * @author 暴走的小 ...
- Locust源码目录结构及模块作用
Locust源码目录结构及模块作用如下: 参考文章:https://blog.csdn.net/biheyu828/article/details/84031942
随机推荐
- 每日英语:Researchers Study How Excess Fat Cells Interfere With Organ Function, Metabolism
Why are some obese people healthy, apparently protected from the damaging effects of excess fat on t ...
- iOS 减法计算器
一: 在界面上拖入相应的控件 二: 给每个控件设置关联 //监听按钮的点击 - (IBAction)compute:(id)sender; //第一个文本输入框的值 @property (weak, ...
- pom.xml里发布和下载包
1.下载包 在<project>标签中 <repositories> <repository> <id>nexus</id> <url ...
- Natural Language Processing, 2017, Mar.29, Weekly Report
Distributed Representations of Words and Phrases and their Compositionality T Mikolov, I Sutskever, ...
- S3C2440时钟体系结构
任意一款单板,我们了解其时钟都是通过时钟树来的. 这里没有全部截完,只是讲解时钟来源,OSC代表晶振,这说明我们的时钟可以来至晶振OSC也可以来至外部输入EXTCLK,这是通过OM选择器来完成的. 2 ...
- [转]Commons IO 官方文档
原文地址:http://ifeve.com/commons-io/ 本文翻译自 Commons IO 官方文档 译者:MagicWolf Common IO 是一个工具库,用来帮助开发IO功能 它包括 ...
- Caused by: java.io.IOException: Added a key not lexically larger than previous.
为了重复这个实验,遇到不少坑 https://www.iteblog.com/archives/1889.html /** * Created by Administrator on 2017/8/1 ...
- 为什么页面设计宽度要控制在960px
其实这里涉及到了一个网页栅格系统的问题,而且这个观念是从苹果的设计师那里来的 网站 首页页面宽度 px Yahoo! 950 淘宝 950 MySpace 960 新浪 950 网易 960 Live ...
- shell中date使用总结-基于自动定期备份mysql实践
------------------------时间的格式 date [OPTION]... [+FORMAT] echo `date 空格 +'时间格式串'` 调用date必须加符号反引号``,表示 ...
- Eclipse调试Java的10个技巧【转】
clipse调试Java的10个技巧 先提三点 不要使用System.out.println作为调试工具 启用所有组件的详细的日志记录级别 使用一个日志分析器来阅读日志 1.条件断点 想象一下我们平时 ...