Android系统基础(01)简介

112 篇文章 91 订阅
49 篇文章 15 订阅

该系列文章总纲链接:专题分纲目录 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等级开发版本代号名称
01Android 1.0<Nothing>21Android 5.0.1Lolipop
02Android 1.1Petit Four22Android 5.1.0Lolipop
03Android 1.5 Cupcake23Android 6.0Marshmallow
04Android 1.6Donut24Android 7.0Nougat
05Android 2.0 Éclair25Android 7.1Nougat
06Android 2.0.1 Éclair26Android 8.0Oreo
07Android 2.1Éclair27Android 8.1Oreo
08Android 2.2-2.2.3Froyo28Android 9.0Pie
09Android 2.3-2.3.2Gingerbread29Android10.0Q
10Android 2.3.3-2.3.7Gingerbread30Android11.011.0(代号->数字)
11Android 3.0Honeycomb31Android12.012.0
12Android 3.1Honeycomb
13Android 3.2Honeycomb
14Android 4.0-4.0.2Ice Cream Sandwich
15Android 4.0.3-4.0.4Ice Cream Sandwich
16Android 4.1Jelly Bean    
17Android 4.2Jelly Bean    
18Android 4.3Jelly Bean    
19Android 4.4.2KitKat
20Android 4.4WKitKat

关于各个版本的内容更新,可以参考文章: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-mockMOCK就是一系列的模拟类,最后编译为java静态库

javasqlite    

sqlite java包
androidplot用于统计数据以图表的形式展现

javassist

一个开源的分析、编辑和创建Java字节码的类库

ant-globant相关

jdiff

(主机Java库),比较工具

antlr编译为java静态库,开源语法分析器jhead  

jpeg文件头exif编辑修改软件

apache-httpappache的HTTP库,java实现jpeg  

 jpeg图片处理库

apache-xmlxml相关,java实现

junit

java单元测试工具

astl libastl,和stl有关

Libffi

Libffi库提供了最底层的、与架构相关的、完整的FFI,因此在它的上层必须有函数来管理两种语言之间参数的格式转换。FFI(Foreign Function Interface)允许以一种语言编写的代码调用另一种语言的代码

bisonGNU 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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图王大胜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值