1、系统结构:

一、应用程序层

        Android平台不仅仅是操作系统,也包含了许多应用程序,诸如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用程序。这些应用程序都是用Java语言编写,并且都是可以被开发人员所开发的其他应用程序替换,这点不同于其他手机操作系统固化在系统内部的系统软件,更加灵活和个性化。
用户开发的Android应用程序和Android的核心应用程序是同一层次的,它们都是基于Android的系统API构建的。 二、应用程序框架层 应用程序框架层是开发者从事Android应用开发的基础,很多核心应用程序也是通过这一层来实现其核心功能,该层简化了组件的重用,开发人员可以直接使用它提供的组件进行快速的应用程序开发,也可以通过继承而实现个性化的拓展。
一下是这次层中,各个部分的功能: Activity Manager(活动管理器):管理各个应用程序生命周期以及通常的导航回退功能
Window Manager(窗口管理器):管理所有的窗口程序
Content Provider(内容提供器):通过它可以在不同应用程序之间存取或者分享数据
View System(视图系统):构建应用程序的基本组件
Notification Manager(通知管理器):通过它应用程序可以在状态栏中显示自定义的提示信息
Package Manager(包管理器):Android系统内的程序管理,可以查看Android应用程序以及Activity的相关信息
Telephony Manager(电话管理器):管理所有的移动设备功能
Resource Manager(资源管理器):提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件,主题样式,二进制文件等
Location Manager(位置管理器):提供位置服务
XMPP Service(XMPP服务):提供Google Talk服务 三、系统运行库层: Android系统运行库层主要分为系统库和Android运行时环境两部分。 系统库:
系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。其主要包含以下几个部分:
Surface Manager:执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。 Media Framework:多媒体库,支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H 、AAC、ARM。
SQLite:轻量级的关系型数据库引擎
OpenGL|ES:根据OpenGL ES 1.0 API标准实现的3D绘图函数库
FreeType:提供点阵字与向量字的描绘与显示
WebKit:开源的浏览器引擎,支持CSS,JAVASCRIPT,DOM等脚本语言
SGL:底层的2D图形渲染引擎
SSL:在Andorid上通信过程中实现安全认证
Libc:从BSD继承来的标准C系统函数库,专门为基于embedded linux的设备定制 Android运行时环境(Run Time Context):
Android应用程序时采用Java语言编写,程序在Android运行时环境中执行,运行时环境可分为核心库和Dalvik虚拟机两部分。 核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如android.os、android.net、android.media等等。 Dalvik虚拟机是由Google公司自己设计专门用于Android平台的Java虚拟机,它针对移动终端做了特殊的优化。Dalvik虚拟机具有一下几个特征: )专有的DEX文件格式
一个应用中可以定义很多类,编译完成后即会有很多相应的CLASS文件,CLASS文件内会有不少冗余的信息;而DEX文件格式会把所有的CLASS文件内容整合到一个文件中。这样,除了减少整体的文件尺寸,I/O操作,也提高了类的查找速度。原来每个类文件中的常量池,在DEX文件中由一个常量池来管理,而且DEX文件的结构非常紧凑。 )一个应用,一个虚拟机实例,一个进程
每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制,内存分配和管理等等都是依赖底层操作系统实现的。所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。不同的应用在不同的进程空间里运行,对不同来源的应用都使用不同的Linux用户来运行,可以最大程度的保护应用程序的安全和独立运行特性。
在Android系统中,Zygote 是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,每当系统要求执行一个 Android应用程序时,Zygote就会孵化(FORK)出一个子进程来执行该应用程序。Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化,资源库的加载,预置类库的加载和初始化等操作,而在系统需要一个新的虚拟机实例时,Zygote通过复制自身,最快速的提供给系统。 ) 基于寄存器
Dalvik虚拟机是基于寄存器的,相对于基于堆栈的虚拟机实现,基于寄存器的虚拟机实现虽然在硬件通用性上要差一些,但是它在代码的执行效率上却更胜一筹。在基于寄存器的虚拟机里,可以更为有效的减少冗余指令的分发和减少内存的读写访问。 四、Linux内核层 Google选择了Linux作为Android的底层支撑系统。当前的 Android系统是基于Linux2.6内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核。
当然,除了标准的Linux内核外,Android还增加了内核的驱动程序:Binder(IPC)驱动、显示驱动、输入设备驱动、音频系统驱动、摄像头驱动、WiFi驱动、蓝牙驱动、电源管理。

2、目录结构:

src/  java原代码存放目录

gen/ 自动生成目录

gen 目录中存放所有由Android开发工具自动生成的文件。目录中最重要的就是R.java文件。 这个文件由Android开发工具自动产生的。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。正因为R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java。R.java在应用中起到了字典的作用,它包含了界面、图标、常量等各种资源的id,通过R.java,应用可以很方便地找到对应资源。另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。

res/ 资源(Resource)目录

在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。具体请看ppt下方备注栏。

assets资源目录

Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径,如:file:///android_asset/xxx.3gp

AndroidManifest.xml 项目清单文件

 这个文件列出了应用程序所提供的功能,以后你开发好的各种组件需要在该文件中进行配置,如果应用使用到了系统内置的应用(如电话服务、互联网服务、短信服务、GPS服务等等),你还需在该文件中声明使用权限。

default.properties 项目环境信息,一般是不需要修改此文件
res/drawable 专门存放png、jpg等图标文件。在代码中使用getResources().getDrawable(resourceId)获取该目录下的资源。
res/layout 专门存放xml界面文件,xml界面文件和HTML文件一样,主要用于显示用户操作界面。
res/values 专门存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中,如下:
· strings.xml 定义字符串和数值,在Activity中使用getResources().getString(resourceId) 或getResources().getText(resourceId)取得资源。它的作用和struts中的国际化资源文件一样。
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="itcast">传智播客</string>
</resources> · arrays.xml 定义数组。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="colors">
<item>red</item>
<item>yellow</item>
<item>green</item>
<item>blue</item>
</string-array>
</resources> · colors.xml 定义颜色和颜色字串数值,你可以在Activity中使用getResources().getDrawable(resourceId) 以及getResources().getColor(resourceId)取得这些资源。例子如下:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<color name="contents_text">#ff000000</color>
</resources> · dimens.xml 定义尺寸数据,在Activity中使用getResources().getDimension(resourceId) 取得这些资源
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<dimen name="key_height">50dip</dimen>
</resources> · styles.xml 定义样式。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="itcastText" parent="@style/Text">
<item name="android:textSize">18px</item>
<item name="android:textColor">#008</item>
</style>
</resources> res/anim/ 编译成帧动画的XML文件。
res/xml/ 在Activity中使用getResources().getXML()读取该目录下的XML资源文件。
res/raw/ 该目录下的文件将直接被复制到设备上。编译软件时,这些数据不会被编译,它们被直接加入到程序安装包里。 为了在程序中使用这些资源,你可以调用getResources().openRawResource(ID) , 参数ID形式:R.raw.somefilename。

Android学习笔记_40_系统结构 目录结构的更多相关文章

  1. Android学习笔记__2__Android工程目录结构

    一.创建Android工程HelloWorld . src 文件夹里的是源文件 . Android2.2 是引用的类库,这些和 java 的都一样 . gen里面的类就是 ADT 自动生成的啦,一般只 ...

  2. Linux学习笔记之Linux目录结构、磁盘命名、启动过程

    1.Linux磁盘命名规则 名称的起名规则——/dev/xxyN: 1.Linux下装所有硬件设备的一个目录叫 /dev(devices) 2.Linux没有C盘.D盘.Linux最根上的一个目录叫  ...

  3. Laravel5.1 学习笔记1, 目录结构和命名空间(待修)

    自从用 Laravel4做了个小网站,使用了数据库ORM Eloquent, 就放下了一段时间,想不到这个与Asp.net MVC 有着异曲同工之妙的框架已经出了下个版本,而且还有不小的改动,因此不得 ...

  4. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring目录结构和基础JAR包介绍

    可以通过网址 http://repo.spring.io/simple/libs-release-local/org/springframework/spring/ 下载名称为 springframe ...

  5. linux云计算集群架构学习笔记:系统文件的目录结构

    文件的基本管理和XFS文件系统备份恢复 1.1  Linux系统目录结构,相对/绝对路径. 1.2  创建/复制/删除文件,rm -rf / 意外事故 1.3 查看文件内容 1.4 xfs文件系统的备 ...

  6. Vue2.x源码学习笔记-源码目录结构整理

    先从github上下载或者clone一个vue分支项目 https://github.com/vuejs/vue 查看下目录结果 先列出一些目录 Vue |— build 打包相关的配置文件,其中最重 ...

  7. 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常

    目录(?)[-] SOAP JSON和XMLPullParser Exception处理 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog. ...

  8. 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView

    目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...

  9. Android学习笔记(一)

    目录 Android学习笔记(一) 一.JDK.Android SDK 二.部分项目结构 三.字符串引用 四.外层build.gradle详解 五.app->build.gradle详解 六.日 ...

随机推荐

  1. zookeeper简单命令

    bin/zkCli.sh -server ls / create /zk_test my_data get /zk_test set /zk_test admln delete /zk_test ad ...

  2. POJ 2570 Fiber Network

    Description Several startup companies have decided to build a better Internet, called the "Fibe ...

  3. Java学习第十九天

    1:异常(理解) (1)程序出现的不正常的情况. (2)异常的体系 Throwable |--Error 严重问题,我们不处理. |--Exception |--RuntimeException 运行 ...

  4. swpuctf-web部分学习总结

    1.用优惠码 买个 X ? (1)第一步: 这道题第一步主要知道利用php的随机种子数泄露以后就可以利用该种子数来预测序列,而在题目中会返回15位的优惠码,但是必须要24位的优惠码,因此要根据15位的 ...

  5. 经典算法详解(1)斐波那契数列的n项

    斐波那契数列是一个常识性的知识,它指的是这样的一个数列,它的第一项是1,第二项是1,后面每一项都是它前面两项的和,如:1,1,2,3,5,8,13,21,34,55,89,144,233…… 说明:由 ...

  6. python实现查询的数据写入到excel

    #coding=utf-8import sysimport xlwtimport pymysql as MySQLdb #这里是python3 如果你是python2.x的话,import MySQL ...

  7. [转]微信小程序安全浅析

    本文转自:http://blog.csdn.net/baize_security/article/details/54582854 引言 近期微信小程序重磅发布,在互联网界掀起不小的波澜,已有许多公司 ...

  8. Mysql自动更新字段时间

    Mysql中更新某天数据可设置该条数据中的某个字段自动更新 ALTER TABLE `表名` MODIFY `字段名` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON U ...

  9. Java 枚举 获取前后元素,下一个元素

    https://blog.csdn.net/jiangshanwe/article/details/79119219

  10. oracle相关常识

    1.数据类型 VARCHAR2() NUMBER() DATE CLOB BLOB 2.复制表:create table tableName as select * from emp3.新增列:ALT ...