Android核心服务解析篇(二)——Android源码结构分析(二)

简介: Android核心服务解析篇(二)——Android源码结构分析(二)

5.系统程序库


Android4.3程序库的类型非常多,功能也非常强大。在接下来的内容中,将简要讲解Android4.3源码中的一些常用并且重要的系统程序库的知识。


㈠系统C库

Android系统采用的是一个从BSD继承而来的标准的系统函数库bionic,在源码根目录下有这个文件夹,其目录结构如下所示:


bionic/


|——libc//C库


|——libdl//动态链接库相关


|——libm //数学库


|——libstdc++  //C++实现库


|——libthread_db  //线程库


|——linker //连接器相关


|——test //测试相关


㈡媒体库

Android中的媒体库在2.3版之前是由OpenCore实现的,2.3版之后Stragefright被替换了,OpenCore成为新的多媒体的实现库。同时Android自带了一些音视频的管理库,用于管理多媒体的录制,播放,编码和解码等功能。


Android的多媒体程序库的实现代码主要在/frameworks/av/media目录中,其目录结构如下:


frameworks/av/media/


|——common_time  //时间相关


|——libeffects  //多媒体效果


|——libmedia  //多媒体录制,播放


|——libmedia_native  //里面只有一个Android。迥,用来编译native文件


|——libmediaplayerservice//多媒体播放服务的实现库


|——libstagefright  //Stagefright的实现库


|——mediaserver  //跨进程多媒体服务


|——mtp //MTP协议的实现(媒体传输协议)


㈢图层显示库

Android中的图层显示库主要负责对显示子系统的管理,负责图层的渲染,叠加,绘制等功能,提供了2D和3D图层的无缝融合,是整个Android系统显示的“大脑中枢”,其代码在/frameworks/native/services/surfaceflinger/目录下,其目录结构如下所示:


frameworks/native/services/surfaceflinger/


|——DisplayHardware//显示底层相关


|——tests//测试


|——Android.mk//MakeFile文件


|——Barrier.h


|——Client.cpp//显示的客户端实现文件


|——Client.h


|——clz.cpp


|——clz.h


|——DdmConnection.cpp


|——DdmConnection.h


|——DisplayDevice.cpp//显示设备相关


|——DisplayDevice.h


|——EventThread.cpp//消息线程


|——EventThread.h


|——GLExtensions.cpp//OpenGL扩展


|——GLExtensions.h


|——Layer.cpp//图层相关


|——Layer.h


|——LayerBase.cpp//图层基类


|——LayerBase.h


|——LayerDim.cpp//图层相关


|——LayerDim.h


|——LayerScreenshot.cpp//图层相关


|——LayerScreenshot.h


|——MessageQueue.cpp//消息队列


|——MessageQueue.h


|——MODULE_LICENSE_APACHE2//证书


|——SurfaceFlinger.cpp//图层管理者,图层管理的核心类


|——SurfaceFlinger.h


|——SurfaceTextureLayer.cpp//文字图层


|——SurfaceTextureLayer.h


|——Transform.cpp


|——Transform.h


㈣网络引擎库

网络引擎库主要是用来实现Web浏览器的引擎,支持Android的Web浏览器和一个可嵌入的Web视图,这是采用第三方开发的浏览器引擎Webkit实现的,Webkit的代码在/external/webkit/目录下,其目录结构如下所示:


external/webkit/


|——Examples  //Webkit的例子


|——LayoutTests//布局测试


|——PerformanceTests//表现测试


|——Source//Webkit源代码


|——Tools//工具


|——WebKitLibraries//Webkit用到的库


|——Android.mk//Makefile


|——bison_check.mk


|——CleanSpec.mk


|——MODULE_LICENSE_LGPL//证书


|——NOTICE


|——WEBKIT_MERGE_REVISION//版本信息


㈤3D图形库

Android中的3D图形渲染是采用OpenGL来实现的,OpenGl是开源的第三方图形渲染库,使用该库可以实现Android中的3D图形硬件加速或者3D图形软件加速功能,是一个非常重要的功能库。从Android 4.3开始,支持最新,最强大的OpenGL ES3.0.其实现代码在/frameworks/native/opengl中,其目录结构如下所示:


frameworks/native/opengl/


|——include //OpenGL中的头文件


|——libagl //在Mac OS上的库


|——libs //OpenGL的接口和实现库


|——specs //OpenGL的文档


|——tests //测试相关


|——tools //工具库



㈥SQLite

SQLite是Android系统自带的一个轻量级关系数据库,其实现源代码已经在网上开源。SQLite的优点是操作方便,运行速度较快,占用资源较少等,比较适合在嵌入式设备上面使用。SQLite是Android系统自带的实现数据库功能的核心库,其代码实现分为Java和C两个部分,Java部分的代码位于/frameworks/base/core/java/android/database,目录结构如下所示:


frameworks/base/core/java/android/database/


|——sqlite//SQLite的框架文件


|——AbstractCursor.java//游标的抽象类


|——AbstractWindowedCursor.java


|——BulkCursorDescriptor.java


|——BulkCursorNative.java


|——BulkCursorToCursorAdaptor.java//游标适配器


|——CharArrayBuffer.java


|——ContentObservable.java


|——ContentObserver.java


|——CrossProcessCursor.java


|——CrossProcessCursorWrapper.java//CrossProcessCursor的封装类


|——Cursor.java//游标实现娄


|——CursorIndexOutOfBoundsException.java//游标出界异常


|——CursorJoiner.java


|——CursorToBulkCursorAdaptor.java//适配器


|——CursorWindow.java//游标窗口


|——CursorWindowAllocationException.java//游标窗口异常


|——CursorWrapper.java//游标封装类


|——DatabaseErrorHandler.java//数据库错误句柄


|——DatabaseUtils.java//数据库工具类


|——DataSetObservable.java


|——DataSetObserver.java


|——DefaultDatabaseErrorHandle.java//默认数据库错误句柄


|——IBulkCursor.java


|——IContentObserver.aidl//aidl用于跨进程通信


|——MatrixCursor.java


|——MergeCursor.java


|——Observable.java


|——package.html


|——SQLException.java//数据库异常


|——StaleDataException.java


Java层的代码主要是实现SQLite的框架和接口的实现,使用户开发应用程序时能很简单地操作数据库,并且捕获数据库异常。


C++层的代码在/external/sqlite路径下,其目录结构如下所示:


external/sqlite/


|——android //Android数据库的一些工具包


|——dist //Android数据库底层实现


从上面Java和C部分的代码目录结构可以看出,SQLite在Android中还是有很重要的地位的,并且在SDK中会有开放的接口让应用程序可以很简单方便地操作数据库,对数据进行存储和删除。



6.系统运行库


众所周知,Android系统折应用层是采用Java开发的,由于Java语言的跨平台特性,Java代码必须运行在虚拟机中。正是因为这个特性,Android系统也自己实现了一个类似JVM但是更适用于嵌入式平台的Java虚拟机,这被称为dalvik。


dalvik功能等同于JVM,为Android平台上的Java代码提供了运行环境,dalvik本身是由C++语言实现的,在源码中的根目录下有dalvik文件夹,里面存放的是dalvik虚拟机的实现代码,其目录结构如下所示:


dalvik/


|——dalvikvm  //入口目录


|——dexdump //dex反汇编


|——dexgen //dex生成相关


|——dexlist //dex列表


|——dexopt //与验证和优化


|——docs //文档


|——dvz //zygot相关


|——dx //dx工具,将多个Java转换为dex


|——hit


|——libdex //dex库的实现代码


|——opcode-gen


|——tests //测试相关


|——tools //工具


|——unit-tests  //测试相关


|——vm //虚拟机的实现


|——Android.mk  //Makefile


|——CleanSpec.mk


|——MODULE_LICENSE_APACHE2


|——NOTICE


|——README.txt


正是因为的上面这些代码实现的Android虚拟机,所以应用程序生成的二进制执行文件能够快速,稳定运行在Android系统上。


7.硬件抽象层


Android的硬件抽象是各种功能的底层实现,理论上,不同的硬件平台会有不同的硬件抽象层实现,这一个层次也是与驱动层和硬件层有紧密联系的,起着承上启下的作用,对上要实现应用程序框架层的接口,对下要实现一些硬件的基本功能,以及调用驱动层的接口。需要注意的是,这一层也是广大OEM厂商改动最大的一层,因为这一层的代码跟终端采用什么样硬件的硬件平台的很大的关系。源码中存放的是硬件抽象层框架的实现代码和一些平台无关的接口的实现。硬件抽象层代码在源码根目录下的hardware文件夹中,其目录结构如下所示:


hardware/


|——libhardware//新机制硬件库


|——libhardware_legacy//旧机制硬件库


|——ril//ril模块相关的底层实现


从上面的目录结构我们可以看出,硬件抽象层中主要是实现了一些底层的硬件库,用来实现应用层框架中的功能,至于其体硬件库中的哪些内容,我们可以继续分其目录结构,例如libhardware目录下的结构为:


hardware/libhardware/


|——include//入口目录


|——modules//dex反汇编


|——|——audio  //音频相关底层库


|——|——audio_remote_submix//音频混合相关


|——|——gralloc  //帧缓冲


|——|——hwcomposer  //音频相关


|——|——local_time  //本地时间


|——|——nfc //nfc功能


|——|——nfc-nci  //nfc接口


|——|——power  //电源


|——|——usbaudio  //USB音频设备


|——|——Android.mk  //Makefile


|——|——README.android


|——tests //dex生成相关


|——dexlist //dex列表


|——dexopt //验证和优化


|——docs //文档


从上面的目录结构我们可以分析出,libhardware目录主要是Android系统的某些功能的底层实现,包括audio,nfc,power。


libhardware_legacy目录与libhardware大同小异,只是针对旧的实现方式做的一套硬件库,其目录下还有uevent,wifi以及虚拟机的底层实现。这两个目录下的代码一般会由设备厂家根据自身的硬件平台来实现符合Android机制的硬件库。


ril目录下存放的是无线硬件设备与电话的实现,其目录结构如下所示:


hardware/ril/


|——include //头文件


|——libril //libril库


|——mock-ril


|——reference-ril  //reference ril库


|——rild //ril守护进程


|——CleanSpec.mk

相关文章
|
弹性计算 运维 安全
优化管理与服务:操作系统控制平台的订阅功能解析
本文介绍了如何通过操作系统控制平台提升系统效率,优化资源利用。首先,通过阿里云官方平台开通服务并安装SysOM组件,体验操作系统控制平台的功能。接着,详细讲解了订阅管理功能,包括创建订阅、查看和管理ECS实例的私有YUM仓库权限。订阅私有YUM仓库能够集中管理软件包版本、提升安全性,并提供灵活的配置选项。最后总结指出,使用阿里云的订阅和私有YUM仓库功能,可以提高系统可靠性和运维效率,确保业务顺畅运行。
|
12月前
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
685 2
|
网络协议 安全 Devops
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
549 4
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
562 15
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10033 2
|
安全 Android开发 数据安全/隐私保护
深入探索Android与iOS系统安全性的对比分析
在当今数字化时代,移动操作系统的安全已成为用户和开发者共同关注的重点。本文旨在通过比较Android与iOS两大主流操作系统在安全性方面的差异,揭示两者在设计理念、权限管理、应用审核机制等方面的不同之处。我们将探讨这些差异如何影响用户的安全体验以及可能带来的风险。
1056 21
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
Java 开发工具 Android开发
安卓与iOS开发环境对比分析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据半壁江山。本文深入探讨了这两个平台的开发环境,从编程语言、开发工具到用户界面设计等多个角度进行比较。通过实际案例分析和代码示例,我们旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和个人偏好做出明智的选择。无论你是初涉移动开发领域的新手,还是寻求跨平台解决方案的资深开发者,这篇文章都将为你提供宝贵的信息和启示。
281 8
|
7月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1380 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡

热门文章

最新文章

推荐镜像

更多