该系列文章总纲链接:专题分纲目录 Android系统基础
本章节主要讲述 android 基本架构、版本、平台、开源项目列表以及一些较好的学习网站。
1 Android基本架构概述
一共是Application | framework | (HAL&&Dalvik/ART) | (Kernel&&Driver) 四层,经典架构图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/6ef61d849e8b79bab881c175e512325b.png)
Android四层的含义分别如下:
- APP:该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等。
- Framework:该层是Android应用开发的基础。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、 电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。
- HAL:系统库包括很多个子系统,有图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库等,比如 android.os、android.net、android.media等等。后者是一种基于寄存器的java虚拟机,Dalvik/ART虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。
- Linux Drivers&&Kernel:Android核心系统服务依赖于Linux内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、Binder(IPC)驱动、电源管理等。
总结与说明:
- 若从事Android应用开发,那应该研究Android的应用框架层和应用程序层,之后随着经验的积累也需要了解安卓framework的一些知识;
- 若从事Android系统开发,那应该研究Android的系统库和Android运行时环境,以及MTK&Qcom平台;
- 若从事Android驱动开发,那应该研究Linux驱动、内核,以及MTK&Qcom平台。
- 若想通过安卓系统的学习,全面 理解操作系统以及 背后的设计规则,那么 应用层、框架层、驱动层的学习就都是必不可少的了。总之,找准切入点,实践出真知。
2 Android版本总结
API等级 | 开发版本 | 代号名称 | API等级 | 开发版本 | 代号名称 |
01 | Android 1.0 | <Nothing> | 21 | Android 5.0.1 | Lolipop |
02 | Android 1.1 | Petit Four | 22 | Android 5.1.0 | Lolipop |
03 | Android 1.5 | Cupcake | 23 | Android 6.0 | Marshmallow |
04 | Android 1.6 | Donut | 24 | Android 7.0 | Nougat |
05 | Android 2.0 | Éclair | 25 | Android 7.1 | Nougat |
06 | Android 2.0.1 | Éclair | 26 | Android 8.0 | Oreo |
07 | Android 2.1 | Éclair | 27 | Android 8.1 | Oreo |
08 | Android 2.2-2.2.3 | Froyo | 28 | Android 9.0 | Pie |
09 | Android 2.3-2.3.2 | Gingerbread | 29 | Android10.0 | Q |
10 | Android 2.3.3-2.3.7 | Gingerbread | 30 | Android11.0 | 11.0(代号->数字) |
11 | Android 3.0 | Honeycomb | 31 | Android12.0 | 12.0 |
12 | Android 3.1 | Honeycomb | |||
13 | Android 3.2 | Honeycomb | |||
14 | Android 4.0-4.0.2 | Ice Cream Sandwich | |||
15 | Android 4.0.3-4.0.4 | Ice Cream Sandwich | |||
16 | Android 4.1 | Jelly Bean | |||
17 | Android 4.2 | Jelly Bean | |||
18 | Android 4.3 | Jelly Bean | |||
19 | Android 4.4.2 | KitKat | |||
20 | Android 4.4W | KitKat |
关于各个版本的内容更新,可以参考文章:Android系统版本特性与差异-掘金说的比较详细。
3 Android开发平台简介
- CL:CodeLine 代码线
- AOSP:Android Open Source Package 安卓系统开源源码包。
Android各个平台都是先基于Google的源生Android代码进行更改,形成自己的平台代码,各个终端厂商再根据平台代码提供自己的移动终端解决方案,目前常见的主要移动终端平台位:高通 、MTK、英特尔、freescale、展讯、瑞芯微RK等。。。
4 Android开源项目列表简介
这里是针对常见的开源项目总结(针对Android external目录,以便于研究代码时能熟悉这些常见的名词),列表说明如下:
项目名称 | 项目功能 | 项目名称 | 项目功能 |
android-clat | 当应用不支持64位DNS,通过CLAT 处理从IPV4到IPV6的转换。 CLAT是IPV4在GSM网络使用NAT64转换到IPV6 的入口 | iptables | 与Linux 内核集成的 IP 信息包过滤系统 |
android-mock | MOCK就是一系列的模拟类,最后编译为java静态库 | javasqlite | sqlite java包 |
androidplot | 用于统计数据以图表的形式展现 | javassist | 一个开源的分析、编辑和创建Java字节码的类库 |
ant-glob | ant相关 | jdiff | (主机Java库),比较工具 |
antlr | 编译为java静态库,开源语法分析器 | jhead | jpeg文件头exif编辑修改软件 |
apache-http | appache的HTTP库,java实现 | jpeg | jpeg图片处理库 |
apache-xml | xml相关,java实现 | junit | java单元测试工具 |
astl | libastl,和stl有关 | Libffi | Libffi库提供了最底层的、与架构相关的、完整的FFI,因此在它的上层必须有函数来管理两种语言之间参数的格式转换。FFI(Foreign Function Interface)允许以一种语言编写的代码调用另一种语言的代码 |
bison | GNU parser generator,自动生成语法分析器的程序 | libgsm | 一个 GSM 的音频编码和解码库 |
blktrace | blktrace是块层IO路径监控和分析工具,使用它可以深入了解IO通路,对监控,性能调优都有很大帮助 | libpcap | 网络数据包抓取工具 |
bluetooth | 蓝牙相关的库,包括bluez | libselinux | SELinux,MAC,安全相关 |
bouncycastle | 因为 Bouncy Castle 被设计成轻量级的,所以从 J2SE 1.4 到 J2ME(包括 MIDP)平台,它都可以运行。它是在 MIDP 上运行的唯一完整的密码术包。Bouncy Castle 是一种用于 Java 平台的开放源码的轻量级密码术包。它支持大量的密码术算法,并提供 JCE 1.2.1 的实现。 | libvpx | libvpx - 开源的VP8编码解码器 |
bsdiff | (主机)为二进制文件生成不定 | libxml2/libxslt | C语言的XML解析库 |
bzip2 | (主机/目标机)是一个基于Burrows-Wheeler,变换的无损压缩软件 | llvm | LLVM 是 Low Level Virtual Machine (低级虚拟机)的简称,这个库提供了与编译器相关的支持,可以作为多种语言编译器的后台来使用。能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成 |
clang | 是一个C、C++ 和 Objective-C 程序语言的编译器前端。它采用了底层虚拟机(LLVM)作为其后端。是提供一个(GCC)的替代品。作者是克里斯·拉特納,在苹果公司的支持下进行开发,而原始码授权是使用类BSD的开源授权 | mesa3d | 是个类似OPENGL的应用程序接口,他可以在Unix/X11上运行 |
chrominum-libpac | 属于chromium,和webkit相关 | netperf | 一种网络性能的测量工具,主要针对基于TCP或UDP的传输 |
clearsilver | (主机模板语言) ,包括Python,Java,Perl,C的库 | neven | 人脸识别的一套库 |
collada | 编译完的库colladadom。 可以通过COLLADA DOM库来进行场景文件的读取与处理操作。COLLADA DOM的编程方式类似COM。因为COLLADA DOM拥有丰富的内容用于表现场景中的各种元素,从多边形几何体到摄像机无所不包。COLLADA不仅仅可以用于建模工具之间交换数据之用,也可以作为场景描述语言用于小规模的实时渲染。COLLADA:COLLADA是一个开放的标准,最初用于3D软件数据交换,由SCEA发起,现在则被许多著名厂家支持如Autodesk、XSI等。 | opencv | OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 |
dbus | dbus 消息总线和活动系统,是freedesktop下开源的IPC通信机制 | openssl | 为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法,也是C语言的SSL工具 |
dhcpcd | 一个兼容 RFC2131的DHCP客户端程序,支持DHCP的全部功能并且体积非常小,是动态主机配置协议的工具 | oprofile | 用于Linux的若干种评测和性能监控工具,即一种性能分析机制 |
dnsmasq | DNSmasq是一个小巧且方便的用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。 | ppp | ppp(点对点)协议处理 |
doclava | Doclava是一个新的Javadoc工具,它允许你自定义一些javadoc标签。这个工具来自Google | proguard | 是一个压缩、优化和混淆Java字节码文件的免费的工具 |
dropbear | dropbear是轻量的sshd服务器和客户端;与OpenSSH相比,他更简洁小巧,占用的内存少。 | protobuf | google的协议buffer,利用.proto文件自动生成代码 |
e2fsprogs | (主机)Ext2/3/4文件系统的工具 | qemu | 是一套由Fabrice Bellard所编写的模拟处理器的自由软件,即(主机)模拟环境 |
easymock | 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试 | qemu-pc-bios | (主机)模拟环境,是一套由Fabrice Bellard所编写的模拟处理器的自由软件 |
elfutils | (主机)ELF工具 | safe-iop | 跨平台的整数运算 |
expat | Expat 是一个用C语言开发的、用来解析XML文档的开发库 | skia | 完整的2D图形库 |
emma | Java代码覆盖检查工具 | speex | 是一套主要针对语音的开源免费,无专利保护的音频压缩格式 |
embunit | 嵌入式C系统的测试工具库与框架 | sonivox | Sonic的嵌入式音乐合成器 |
fdlibm | 精确实现IEEE754浮点数标准的数学库 | srec | (主机/目标机)Motorola的S-records 16进制文件格式工具 |
flac | 一套著名的自由音频压缩编码 | srtp | 用于增强VOIP网络电话协议SRTP协议(Secure Real-time Transport Protocol),安全传输协议 |
freetype | 一个完全免费(开源)的、高质量的且可移植的字体引擎 | stlport | stl的一个开源实现。android本身不支持stl,可以使用这个库做为替代 |
fsck_msdos | 和文件系统格式有关。 | strace | 它能够显示所有由用户空间程序发出的系统调用,一种监视系统调用的工具 |
genext2fs | (主机)Ext2文件系统生成工具 | svox | 语音/文字转换库 |
giflib | GIF工具 | tagsoup | 格式良好且有效的XHTML的SAX事件流这是一个java库,用于对HTML进行解析,并交付一个表 |
grub | 是一个来自GNU项目的多操作系统启动程序。 | tcpdump | 著名的网络数据抓取程序 |
gtest | 测试框架是在不同平台上(Linux,Mac OS X,Windows,Cygwin,Windows CE和Symbian)为编写C++测试而生成的 | tinyxml/ tinyxml2 | (主机/目标机)这是一个开源的基于DOM模型的xml解析器 |
guava | 该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库。 | Valgrind | 一款用于内存调试、内存泄漏检测以及性能分析的软 开发工具 |
icu4c/ icu | IBM用于支持软件国际化的开源项目,与编码相关 | webp | WebP是Google新推出的影像技术,它可让网页图档有效进行压缩,同 时又不影响图片格式兼容与实际清晰度,进而让整体网页下载速度加快。 |
iproute2 | Linux上有关TCP/IP网路上的流量控制的一系列工具 | webrtc | WebRTC是一项在浏览器内部进行实时视频和音频通信的技术,是谷 歌2010年以6820万美元收购收购Global IP Solutions公司而获得一项技术。 |
yaffs2 | boot.img system.img都是一种yaffs文件系统 | wpa_supplicantX | wpa_supplicant守护程序操作和得到状态信息和事件通知的控制接口wpa_supplicant实现了一个由外部程序使用来控制 |
zlib | zip压缩sdk | xmlwriter | xml文件写入器 |
注意:Android 版本不同,可能涉及 的external 也会不同,这里尽量介绍一些常用的。
5 常用Android资料网站总结
5.1 主线资料:
官方网站1:Android 开发者developer 官网
官方网站2:Android 设备开发 官网
全面整合:Android学习资源网站的整合
5.2 针对Android Framework / ROM工程师:
@1 初级:
- 老罗博客CSDN 说明:主要针对android2.3版本的代码进行系统性的分析与学习,是不错的入门级资料前提是了解J2SE,设计模式,android基础,Linux驱动基础。
- 阿拉神农innost博客CSDN 说明:主要针对android2.3以及后续版本进行部分模块详细分析与学习,对android发展进行了比较详细的解说,是不错的参考资料,前提是熟悉android基础,linux基础。
@2 高级:
对于高级的Android ROM工程师而言,整体性能分析、kernel分析和调试、APP性能分析和调试等都是必备的能力,那如何做呢?这里有一份不错参考资料,如下所示:
- android 性能分析必知必会 :主要是安卓APP层为核心,部分涉及Android framework知识。
- Gityuan博客 | 袁辉辉技术博客 Android 架构篇:这个大神是在小米和达摩院待过的,实实在在的分享,内容主要讲Android framework,更注重实践性,也会涉及到底层BSP的一些调试的知识。