《Android系统开发》笔记
《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-mail客户端,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系统开发》笔记相关推荐
- 《信贷的逻辑与常识》笔记
序 银行信贷风险管理的反思 现状与趋势 银行贷款的质量变化与经济周期.宏观调控政策等存在很高的相关性 现在银行不良贷款的增加主要是前几年经济快速增长时企业过度投资.银行过度放贷所带来的结果. 从历史情 ...
- AI公开课:19.02.27周逵(投资人)《AI时代的投资逻辑》课堂笔记以及个人感悟
AI公开课:19.02.27周逵(投资人)<AI时代的投资逻辑>课堂笔记以及个人感悟 目录 课堂PPT图片 精彩语录 个人感悟 课堂PPT图片 精彩语录 更新中-- 文件图片已经丢失-- ...
- 人工智能入门算法逻辑回归学习笔记
逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了. 秉持着精益求精的工匠精神不断对笔记进行 ...
- 【逻辑回归学习笔记】
算法描述 1.逻辑回归要做的事就是寻找分界面实现二分类. 2.问题假设:对一堆三角形和正方形分类. 3.数据输入:已知正方形和三角形的坐标和标签. 4.算法过程: 知识储备 1.分类和回归 ①分类的目 ...
- 逻辑回归函数学习笔记
继续逻辑回归学习,今日笔记记录. 1.逻辑回归和线性回归的关系:对逻辑回归的概率比取自然对数,则得到的是一个线性函数,推导过程如下. 首先,看逻辑回归的定义 其次,计算两个极端y/(1-y),其值为( ...
- 2.2 逻辑回归-机器学习笔记-斯坦福吴恩达教授
逻辑回归 上一节我们知道,使用线性回归来处理 0/1 分类问题总是困难重重的,因此,人们定义了逻辑回归来完成 0/1 分类问题,逻辑一词也代表了是(1) 和 非(0). Sigmoid预测函数 在逻辑 ...
- LVM逻辑卷分区笔记
磁盘的静态分区有其缺点:分区大小难评估,估计不准确,当分区空间不够用的时候,系统管理员可能需要先备份整个系统,清除磁盘空间,然后重新对磁盘进行分区,然后恢复磁盘数据到新分区,且需要停机一段时间进行恢复 ...
- 适合理工直男的钟平老师逻辑英语学习笔记
一切的一切都只是套路! --鲁迅 核心公式: En: (状语1) 主(定语1) 谓(状语2) (宾)(定语2) (状语1) Ch: (状语1) (定语1)主 (状语2)谓 (定 ...
- 【数字逻辑】学习笔记 第四章 Part2 常用组合逻辑电路与竞争、险象
文章目录 一.常用组合逻辑电路 1. 译码器 (1) 二进制译码器 74LS138(3/8译码器) a. 一般符号和图形符号 b. 74LS138功能表 c. 两片 `74LS138` 构成 `4-1 ...
- 线性回归、逻辑回归学习笔记
学习源代码 import numpy as np import matplotlib.pyplot as plt def true_fun(X): # 这是我们设定的真实函数,即ground trut ...
最新文章
- 强烈推荐:240多个jQuery插件
- Selenium 2.0的由来及设计架构(二)
- 还在被人脸识别准确率指标欺骗吗?
- Dubbo中基于权重的随机算法
- 高斯噪声调频matlab,基于MATLAB的2ASK调制与解调设计
- ibatis spring框架升级到5.x_Java SSM框架常见面试题,良心整理,
- Azure实践之如何批量为资源组虚拟机创建alert
- 跳出内层循环 使用 for of 代替 map
- python post 上传文件_如何在 Python 中模拟 post 表单来上传文件
- Mr.J--Bootstrap使用
- Python 打印嵌套list中每个数据(遍历列表)
- BZOJ 4807(車-高精度)
- java 素数 五行_(1)转载:八卦数论(二)
- 三个数差的平方公式推导过程_学懂因式分解 你只差这8个完全平方公式推导结论 立马见效...
- kubect安装 windows_k8s安装kubectl top命令
- echarts动态改变series,数据重合问题
- 2022吉林大学软件学院979回忆版
- CAD无法拖动工具栏或菜单解决方法
- 【PHP】实现搜索引擎中把搜索结果命中的关键字标记红色
- 正在运行的dll文件怎么删除?