《Android系统开发》笔记1:Android系统概述

Android四层架构:

1. Linux Kernel&driver层

a.依赖于Linux 2.6内核,包含安全性。内存管理。进程管理,网络协议栈。驱动模型等
b.Android自己加入的驱动,Binder IPC驱动,显示驱动,输入设备驱动。音频系统驱动,摄像头驱动,Wifi驱动。蓝牙驱动,电源管理等

2. Android本地库 & Java执行环境层

Android本地库(C/C++)
Bionic:为嵌入式设备定制的C系统函数库libc
OpenCore:多媒体库
… …

Java执行环境
Dalvik是Android中的java虚拟机,可支持同一时候执行多个虚拟机实例。
每一个Android应用程序都在自己的进程中执行。都拥有一个独立的Dalvik虚拟机实例;
全部java类经过java编译器编译,然后通过SDK中的dx工具转成.dex格式交由虚拟机执行

3. Android应用程序框架层

为最上层的应用程序提供一系列服务和系统,包含:
Views:如Lists, girds, buttons等UI元素;
Content Providers:应用程序之间的数据共享;
Resource Manager: 提供对本地字符串,图形,Layout等资源的訪问;
Notification Manager: 在状态栏显示自己定义提示信息
Activity Manager: 管理Activity生命周期

4. Android应用程序层

基于Java语言的应用程序,既包含Android系统提供的核心应用程序(E-mailclient。SMS,日历,浏览器。通讯簿等),又包含用户开发的Android应用程序

Android系统的三种开发模式:

1. Android应用开发

基于Android提供的系统API(第三层java framework)进行应用层面的开发。通常基于Android SDK开发就可以

2. Android系统开发

通常涉及用户空间各层的开发:C或C++本地库,JNI层,Java类库,应用层

3. Android移植开发

Linux中相关设备的驱动程序开发。比方LCD,触摸屏,键盘,音频,摄像头。蓝牙等。

以及硬件抽象层的开发,硬件抽象层在用户空间。介于驱动和Android系统之间

Android开发辅助工具

aapt:用于建立zip兼容的包,如zip,jar,apk

adb(Android debug bridge),能够通过网络或者USB的方式连接。假设使用网络方式,须要设置ADBHOST环境变量(?)

AIDL(Android Interface Description Language):可生成进程间接口的代码,如Service可能使用的接口

DDMS(Dalvik Debug Monitor Service):可以在模拟器或者设备上管理进程并协助调试

Draw 9-patch:NinePatch是Android平台特有的一种非矢量图形自然拉伸处理方法,能够帮助常规的图形在拉伸时不会缩放;Draw 9-patch同意使用所见即所得方式创建NinePatch图形

Hierarchy Viewer: 用来调试和优化用户界面

mksdcard:创建disk image,能够在模拟器环境下模拟sd卡

TraceView:能够将Android应用程序的trace log图形化

Android系统进程

init进程(1号进程),父进程为0号进程。运行根文件夹底下的init可运行程序,是用户空间进程
——-> /system/bin/sh
——-> /system/bin/mediaserver
——-> zygote
—————–> system_server
—————–>com.android.phone
—————–>android.process.acore(Home)
… …

kthreadd进程(2号进程),父进程为0号进程。是内核进程,其它内核进程都是直接或者间接以它为父进程

Logcat的使用

http://www.zooyoo.org/?p=10560

《Android系统开发》笔记3-Android内核与驱动

Android使用Linux2.6,对标准内核修改较少,可是添加了一些内容,如yaffs文件系统

Android专用驱动

Ashmem匿名共享内存
节点名称/dev/ashmem, 为用户空间程序提供内存分配机制,实现相似malloc的功能
内核中代码路径: kernelmm/ashmeme.c
C libutils库对其进行了封装:system/core/libcutils/ashmeme-*.c

Binder
节点名称/dev/binder, 为用户程序提供IPC支持,是Android中的主要IPC方式
用户空间的libutils工具库(framework/base/libs/utils)和Service Manager守护进程中调用Binder接口提供对整个系统的支持

Logger
三个设备节点:/dev/log/main, /dev/log/event, /dev/log/radio
在内核中代码: kernel/drivers/misc/logger.c
在用户空间logcat(system/core/logcat)调用Logger驱动

Android使用的设备驱动

Framebuffer显示驱动
对于嵌入式系统,Framebuffer通常作为LCD控制器驱动或者其它显示设备的驱动;
FB是一个字符设备,通常其设备节点为/dev/fbX,但在Android中使用/dev/graphic/fb0,该设备节点由init进程自己主动创建,被libui库调用
FB驱动在用户空间多使用ioctl。mmap,write等文件系统接口进行操作,ioctl用于获得/设置信息。mmap能够将Framebuffer的内存映射到用户空间。write直接用写的方式输出显示内容

Event输入设备驱动
Event驱动是通用的输入设备驱动,眼下可支持鼠标。键盘,触摸屏等多种输入设备;
Event设备在文件系统中的设备节点为:/dev/input/eventX,由init进程创建,公libui库使用。
用户空间使用read,ioctl,poll等文件系统接口操作Event设备

V4L2 Camera & Video驱动
V4L2驱动既能够支持视频捕获,也能够支持视频输出,但由于两者硬件结构相差非常大。因此一个系统中的两种驱动程序须要分别实现;
Android中没有直接使用V4L2驱动,而是通过Camera或者Overlay硬件抽象层来使用
用户空间使用ioctl, mmap操作V4L2

OSS音频驱动
Open Sound System是基于字符的音频驱动, 用户空间用ioctl/read/write操作/dev/mixer, /dev/dsp, /dev/xxx接口
Android中没有直接使用OSS驱动,可基于OSS来实现Android Audio部分的硬件抽象层

ALSA音频驱动
比OSS使用更方便的音频驱动,除了OSS原来的ioctl等原始接口外,ALSA还提供了函数库。以简化应用程序;
建议使用用户空间的ALSA库接口,而不是直接操作ALSA驱动程序。
Android中没有直接使用ALSA驱动,而是通过Android–>Audio硬件抽象层–>ALSA库–>ALSA驱动

MTD驱动
Memory Technology Device,通经常使用于Linux中Flash驱动程序,包含字符设备(/dev/mtdX)和块设备(/dev/block/mtdblockX
MTD驱动通常不在用户空间直接调用。而是用于构建文件系统。用户空间仅仅须要使用文件系统就可以

蓝牙驱动
两部分:蓝牙协议 + 蓝牙控制器驱动。
蓝牙协议部分:包含HCI接口,SCO模块。L2CAP模块。BNEP模块等
蓝牙控制器驱动部分:为基于SDIO/UART/USB接口的蓝牙设备提供驱动

Wlan驱动
用户空间使用标准的socket接口进行控制
Wifi驱动在Android中一般编译成module的方式。通过应用程序设置开关进行载入和卸载

《Android系统开发》笔记4-底层库和程序

该层实现的库和程序是Android基本系统, 主要包含:

  • 标准C/C++库 bionic
  • C工具库libcutils
  • C++工具库libutils
  • init进程
  • Shell

bionic-C/C++库
位于bionic文件夹
bionic轻巧为嵌入式系统提供C/C++标准库,支持标准C/C++大部分的库函数;
其他。bionic增加Android一些独特的功能。例log底层支持,property系统(提供系统的范围内的全局变量)

《Android系统开发》笔记的更多相关文章

  1. HTML+CSS笔记 CSS笔记集合

    HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...

  2. CSS笔记--选择器

    CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...

  3. HTML+CSS笔记 CSS中级 一些小技巧

    水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...

  4. HTML+CSS笔记 CSS中级 颜色&长度值

    颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...

  5. HTML+CSS笔记 CSS中级 缩写入门

    盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...

  6. HTML+CSS笔记 CSS进阶再续

    CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...

  7. HTML+CSS笔记 CSS进阶续集

    元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...

  8. HTML+CSS笔记 CSS进阶

    文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...

  9. HTML+CSS笔记 CSS入门续集

    继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...

  10. HTML+CSS笔记 CSS入门

    简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...

随机推荐

  1. MSSQL - 视图操作

    查询语句(包含使用Where子句): string sql = @"SELECT TableName, TablePosition,TableSate, TabelType,OpenTime ...

  2. 终于懂了:Delphi重定义消息结构随心所欲,只需要前4个字节是消息编号就行了(有了这个,就有了主动)

    Delphi重定义消息结构随心所欲,只需要前4个字节是消息编号就行了,跟Windows消息虽然尽量保持一致,但其实相互没有特别大的关系.有了这个,就有了主动,带不带句柄完全看需要. 比如这个结构就带句 ...

  3. vi/vim高级命令集粹

    vi/vim高级命令集粹 (ctrl +v过来 留着以后看) 1.交换两个字符位置 xp 2.上下两行调换 ddp 3.把文件内容反转 :g/^/m0/ (未通过) 4.上下两行合并 J 5.删除所有 ...

  4. android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 3

           今天在写一个小项目的数据库部分的功能时,出现了一个这样的问题:java.lang.RuntimeException: Failure delivering result ResultIn ...

  5. 动手学Javascript(1)——PopStar

    PopStar是一款很流行的手机游戏.它的基本规则是在某个方块上单击,如果该方块周围有和它颜色一样的方块,那么这些方块都被选中.之后在选中方块的某一个上再次单击,所有选中的方块就会消失. 如下图所示, ...

  6. OnClick事件的Sender参数的前世今生——TWinControl.WinProc优先捕捉到鼠标消息,然后使用IsControlMouseMsg函数进行消息转发给图形子控件(意外发现OnClick是由WM_LBUTTONUP触发的)

    这是一个再普通不过的Button1Click执行体: procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('I am B ...

  7. jsoncpp 不能处理long类型数据

    jsoncpp,是一个c++的解析和生成json的开源工具.假设你的c++程序须要解析或生成json,它会使这个过程变得非常easy! 可是,今天在用jsoncpp进行生成json的时候报了错误,非常 ...

  8. Selenium WebDriver java 简单实例

    开发环境 JDK 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html Eclipse: 下载地址:http ...

  9. MonkeyRunner 学习

    monkeyrunner 本文档中包含 一个简单的monkeyrunner示例程序 monkeyrunner API简介 运行monkeyrunner monkeyrunner内建帮助 使用插件扩展m ...

  10. asp.net web api帮助文档的说明

    为asp.net的mvc web api填写自己的帮助文档 1. 加入Help的area(能够通过命令行或其它方式加入) 命令行:Install-Package Microsoft.AspNet.We ...