Android系统基础(01)简介

  • Post author:
  • Post category:其他


该系列文章总纲链接:专题分纲目录 Android系统基础




本章节主要讲述 android 基本架构、版本、平台、开源项目列表以及一些较好的学习网站。


1 Android基本架构概述

一共是Application | framework | (HAL&&Dalvik/ART) | (Kernel&&Driver) 四层,经典架构图如下:

源自官网的Android系统架构图

Android四层的含义分别如下:

  1. APP:该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等。
  2. Framework:该层是Android应用开发的基础。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、 电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。
  3. HAL:系统库包括很多个子系统,有图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库等,比如 android.os、android.net、android.media等等。后者是一种基于寄存器的java虚拟机,Dalvik/ART虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。
  4. Linux Drivers&&Kernel:Android核心系统服务依赖于Linux内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、Binder(IPC)驱动、电源管理等。

总结与说明:

  1. 若从事Android应用开发,那应该研究Android的应用框架层和应用程序层,之后随着经验的积累也需要了解安卓framework的一些知识;
  2. 若从事Android系统开发,那应该研究Android的系统库和Android运行时环境,以及MTK&Qcom平台;
  3. 若从事Android驱动开发,那应该研究Linux驱动、内核,以及MTK&Qcom平台。
  4. 若想通过安卓系统的学习,全面 理解操作系统以及 背后的设计规则,那么 应用层、框架层、驱动层的学习就都是必不可少的了。总之,找准切入点,实践出真知。


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性能分析和调试等都是必备的能力,那如何做呢?这里有一份不错参考资料,如下所示:


5.3 优质开源项目链接总结:


优秀android开源项目总结1



优秀android开源项目总结2



版权声明:本文为vviccc原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。