`
isiqi
  • 浏览: 16087011 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Android底层库libutils介绍

阅读更多

一部分 libutils概述
libutils是Android的底层库,这个库以C++实现,它提供的API也是C++的。Android的层次的C语言程序和库,大都基于libutils开发。 libutils中的头文件如下所示:
frameworks/base/include/utils
libutils的源文件:
frameworks/base/libs/utils
libutils的库名称:
libutils.so
这个库可以分成两个部分,一个部分是底层的工具,另外一个就是实现主要为实现IPC(进程间通讯)的Binder机制。
第二部分 公共库概述
libutils中的公共库部分主要包含的头文件如下所示:
Errors.h:定义宏表示错误代码
Endian.h:定义表示大小端的宏
misc.h:几个字符串和文件相关的功能函数
TextOutput.h:定义文本输出的基类TextOutput
BufferedTextOutput.h:类BufferedTextOutput,它是一个TextOutput的实现
Pipe.h:定义管道类Pipe
Buffer.h:定义内存缓冲区域的类Buffer
List.h:定义链表的模版类
SharedBuffer.h:定义类SharedBuffer表示共享内存。
String16.h:定义表示双字节字符串的类String16
String8.h:定义表示单字节字符串的类String8,并包含了从String16转换功能
VectorImpl.h:定义表示向量的类VectorImpl
Vector.h:定义继承VectorImpl的类模版Vector,以及排序向量类SortedVectorImpl
SortedVector.h:定义排序向量的模版SortedVector
KeyedVector.h:定义使用关键字的向量模板KeyedVector
threads.h:定义线程相关的类,包括线程Thread、互斥量Mutex、条件变量Condition、读写锁ReadWriteLock等
socket.h:定义套结字相关的类Socket
Timers.h:定义时间相关的函数和定时器类DurationTimer。
ZipEntry.h、ZipFileCRO.h、ZipFile.h、ZipFileRO.h、ZipUtils.h:与zip功能相关的类。

第三部分 Binder进程间通讯部分
Binder是进程间通讯部分的核心,它为不同的系统提供了可移植的进程间通讯手段。
RefBase.h :
引用计数,定义类RefBase。
Parcel.h :
为在IPC中传输的数据定义容器,定义类Parcel
IBinder.h
Binder对象的抽象接口, 定义类IBinder
Binder.h
Binder对象的基本功能, 定义类Binder和BpRefBase
BpBinder.h
BpBinder的功能,定义类BpBinder
IInterface.h
为抽象经过Binder的接口定义通用类,
定义类IInterface,类模板BnInterface,类模板BpInterface
ProcessState.h
表示进程状态的类,定义类ProcessState
IPCThreadState.h
表示IPC线程的状态,定义类IPCThreadState
IServiceManager.h:表示服务管理器的类,供其它需要构造服务的类使用
IPermissionController.h:权限控制类。
几个与内存相关的类的头文件如下所示:
IMemory.h:定义内存相关类的接口,表示堆内存的类IMemoryHeap和BnMemoryHeap,表示一般内存的类IMemory和BnMemory。
MemoryHeapBase.h:定义类MemoryHeapBase,继承并实现BnMemoryHeap
MemoryBase.h:定义类MemoryBase,继承并实现BnMemory
在一般的使用过程中,通常是以使用MemoryHeapBase类分配一块堆内存(类似malloc),而MemoryBase表示从一块分配好堆内存中的一部分内存。

此外内存相关的功能中还包含了头文件MemoryDealer.h和MemoryHeapPmem.h。
Binder功能中各个类之间的关系如下图所示:

分享到:
评论

相关推荐

    Android 代码分析

    25 Android的底层库libutils介绍 70 25.1 libutils概述 70 25.2 公共库概述 70 25.3 Binder进程间通讯部分 71 26 Android IPC 通讯机制源码分析 73 26.1 Binder通信简介: 73 26.1.1. ServiceMananger进程注册过程...

    android系统原理及开发要点详解

     第4章“Android的底层库和程序”,介绍Android系统的基础程序,以本地程序为主。  第5章“Android的Java虚拟机和Java环境”,这是介于本地和Java层之间的相关内容,主要介绍Android的Java虚拟机Dalvik的基本概念...

    LibUtils:Android实用程序类

    LibUtils该库提供了用于在Android上创建应用程序的实用程序。 活动应用分段联系对话列表实用程序小部件等等 ... Leak Canary还具有自动检查内存泄漏的功能。描述com.miya38.activity 有AbstractActivity和...

    android 完全中文版 开发应用详解

    第4章 android的底层库和程序 60 4.1 底层库和程序的结构 60 4.1.1 本地实现的基本结构 60 4.1.2 增加本地程序和库的方法 61 4.2 标准c/c++库bionic 64 4.3 c语言工具库libcutils 65 4.4 init可执行程序 66 4.5 ...

    mididriver, 使用 Sonivox EAS库的Android midi驱动程序.zip

    mididriver, 使用 Sonivox EAS库的Android midi驱动程序 Midi驱动器 使用 Sonivox EAS库的Android midi驱动程序。 库可以在发行版中使用。 许可许可许可许可或者Apache许可- 你的选择。包含 Sonivox EAS库,没有对...

    ndk:android ndk jni模块,可从源代码使用android内部库-android source code

    android ndk jni模块,用于从源代码使用android内部库。 用法 将代码从github推送到您的jni文件夹: $ git clone https://github.com/feicong/ndk 将这些行应用于您的Android.mk文件: LOCAL_C_INCLUDES := $...

    Android代码-PowerMenu

    Power Menu Android app that provides an ...libutils (https://github.com/nkming2/libutils-android) material-dialogs (https://github.com/afollestad/material-dialogs) Icon This project has used icon

    mididriver:使用Sonivox EAS库的Android Midi驱动程序

    MIDI驱动程序 使用Sonivox EAS库的Android midi驱动程序。 该库在可用。 根据Apache许可获得许可。 包括在不虚假引用libutils和libcutils的情况下重建的Sonivox EAS库。 ARM版本已使用汇编程序源文件构建。加载DLS...

    android杂记:C++文件的添加log方法分享

    1.添加头文件 代码如下:#include  //或者 #include  这个时候可以使用ALOGE/ALOGI/ALOGW 等方法打印出log 不过有些地方不能这么使用,因为依赖libutils libctuils库在mk文件见添加如下依赖编译即可 代码如下:#...

    一步步写嵌入式操作系统.zip

    编译错误2: gcc -g -O2 -o skyeye skyeye.o ./utils/libutils.a ./arch/arm/libarm.a ./device/libdev.a ./arch/mips/libmips.a ./arch/ppc/libppc.a ./arch/bfin/libbfin.a ./arch/mips/libmips.a ./arch/coldfire...

    ft::avocado:具有图形用户界面的简单手工操作系统

    在QEMU 5.1中运行的skiftOS链接(如果您是新手,请从此处开始)(单击此处可体验skiftOS)致谢贡献者专案 (BSD-2-条款许可) (zlib许可证) (SIL OPEN FONT许可) :虽然并未直接使用,但AK是创建libutils的一大...

Global site tag (gtag.js) - Google Analytics