该系列文章总纲链接:专题分纲目录 Android系统基础
本章节主要讲述 android 基本架构、版本、平台、开源项目列表以及一些较好的学习网站。
1 Android基本架构概述
一共是Application | framework | (HAL&&Dalvik/ART) | (Kernel&&Driver) 四层,经典架构图如下:
Android四层的含义分别如下:
总结与说明:
若是从事Android应用开发,那应该研究Android的应用框架层和应用程序层;
若是从事Android系统开发,那应该研究Android的系统库和Android运行时环境,以及MTK&Qcom平台;
若是从事Android驱动开发,那应该研究Linux驱动、内核,以及MTK&Qcom平台。
如果你想通过安卓系统的学习,全面 理解操作系统以及 背后的设计规则,那么 应用层、框架层、驱动层的学习就都是必不可少的了。总之,找准切入点,实践出真知。
2 Android版本总结
API等级 | 开发版本 | 代号名称 |
API等级01 | Android 1.0 | |
API等级02 | Android 1.1 | Petit Four |
API等级03 | Android 1.5 | Cupcake |
API等级04 | Android 1.6 | Donut |
API等级05 | Android 2.0 | Éclair |
API等级06 | Android 2.0.1 | Éclair |
API等级07 | Android 2.1 | Éclair |
API等级08 | Android 2.2-2.2.3 | Froyo |
API等级09 | Android 2.3-2.3.2 | Gingerbread |
API等级10 | Android 2.3.3-2.3.7 | Gingerbread |
API等级11 | Android 3.0 | Honeycomb |
API等级12 | Android 3.1 | Honeycomb |
API等级13 | Android 3.2 | Honeycomb |
API等级14 | Android 4.0-4.0.2 | Ice Cream Sandwich |
API等级15 | Android 4.0.3-4.0.4 | Ice Cream Sandwich |
API等级16 | Android 4.1 | Jelly Bean |
API等级17 | Android 4.2 | Jelly Bean |
API等级18 | Android 4.3 | Jelly Bean |
API等级19 | Android 4.4.2 | KitKat |
API等级20 | Android 4.4W | KitKat |
API等级21 | Android 5.0.1 | Lolipop |
API等级22 | Android 5.1.0 | Lolipop |
API等级23 | Android 6.0 | Marshmallow |
API等级24 | Android 7.0 | Nougat |
API等级25 | Android 7.1 | Nougat |
API等级26 | Android 8.0 | Oreo |
API等级27 | Android 8.1 | Oreo |
API等级28 | Android 9.0 | Pie |
API等级29 | Android10.0 | 10.0 |
3 Android开发平台简介
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 主线资料:
官方网站:Android 开发者 官网
全面整合:Android学习资源网站的整合
5.2 针对Android FrameWork工程师:
老罗博客CSDN 说明:主要针对android2.3版本的代码进行系统性的分析与学习,是不错的入门级资料前提是了解J2SE,设计模式,android基础,Linux驱动基础。
阿拉神农innost博客CSDN 说明:主要针对android2.3以及后续版本进行部分模块详细分析与学习,对android发展进行了比较详细的解说,是不错的参考资料,前提是熟悉android基础,linux基础。
5.3 优质开源项目总结:
优秀android开源项目总结1
优秀android开源项目总结2