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

相关文章
|
3月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
170 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
7月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
674 83
|
6月前
|
数据采集 前端开发 JavaScript
金融数据分析:解析JavaScript渲染的隐藏表格
本文详解了如何使用Python与Selenium结合代理IP技术,从金融网站(如东方财富网)抓取由JavaScript渲染的隐藏表格数据。内容涵盖环境搭建、代理配置、模拟用户行为、数据解析与分析等关键步骤。通过设置Cookie和User-Agent,突破反爬机制;借助Selenium等待页面渲染,精准定位动态数据。同时,提供了常见错误解决方案及延伸练习,帮助读者掌握金融数据采集的核心技能,为投资决策提供支持。注意规避动态加载、代理验证及元素定位等潜在陷阱,确保数据抓取高效稳定。
157 17
|
6月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
165 15
|
6月前
|
监控 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) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
8月前
|
人工智能 供应链 搜索推荐
中国CRM市场深度分析:主流供应商排名与特点解析
随着中国企业数字化转型的深入,CRM(客户关系管理)软件市场迅速发展,形成了多个优秀解决方案提供商。销售易、纷享销客、明源云客、金蝶云之家、简道云、红圈营销和爱客CRM等供应商各具特色。销售易在大型企业市场表现突出,提供全链路营销销售一体化及强大的AI能力;纷享销客以易用性和高性价比著称,适合中小企业;明源云客专注房地产行业,提供全流程解决方案;金蝶云之家与ERP系统深度整合,适合传统制造业;简道云是低代码平台,灵活性高;红圈营销专注零售业,支持全渠道营销;爱客CRM则主打智能营销功能。企业在选择CRM时需综合考虑实施难度、价格定位、技术支持等因素,并结合自身需求进行试用和调研,确保选择最适合
|
9月前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
325 4
|
9月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
6月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
590 29
|
6月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
174 4

推荐镜像

更多