Android的Linux内核Bionic库是什么?

内容纲要

Android使用开源Linux内核是众所周知的,使用的是ARM版本的内核(与传统的x86有所不同外,Google为Linux内核增强了不少东西,自己开发了Bionic库,同时又贡献会Linux社区了。GNU的内核在体积和运行效率上不适合移动设备,系统核心组件都是以动态库的形式驻留在每个进程中,运行效率和内存占用都是十分重要的问题。

Bionic介绍

Android的基础库之一,是Android和Linux系统内核的桥梁

包含很多基础模块功能,基本都是源于Linux,同时增加了自己的新模块

Android平台为c/c++开发者进行原生应用程序开发所提供的符合POSIX(可移植系统接口)标准的C库

包含系统中最基本的库,包括libc 、libm、libdl、 libstd++、 libthread_db以及Android特有的链接器linker

通俗的说,就是NDK的API

五个库

libc

Libc是C语言最基础的库文件,它提供了所有系统的基本功能,这些功能主要是对系统调用的封装,是Libc是应用和Linux内核交流的桥梁,主要功能如下:

进程管理:包括进程的创建、调度策略和优先级的调整

线程管理:包括线程的创建和销毁,线程的同步/互斥等

内存管理:包括内存分配和释放等

时间管理:包括获取和保存系统时间、获取当前系统运行时长等

时区管理:包括时区的设置和调整等

定时器管理:提供系统的定时服务

文件系统管理:提供文件系统的挂载和移除功能

文件管理:包括文件和目录的创建增删改

网络套接字:创建和监听socket,发送和接受

DNS解析:帮助解析网络地址

信号:用于进程间通信

环境变量:设置和获取系统的环境变量

Android Log:提供和Android Log驱动进行交互的功能

Android 属性:管理一个共享区域来设置和读取Android的属性

标准输入/输出:提供格式化的输入/输出

字符串:提供字符串的移动、复制和比较等功能

宽字符:提供对宽字符的支持。

libm

Libm 是数学函数库,提供了常见的数学函数和浮点运算功能,但是Android浮点运算时通过软件实现的,运行速度慢,不建议频繁使用

libdl

libdl库原本是用于动态库的装载。很多函数实现都是空壳,应用进程使用的一些函数,实际上是在linker模块中实现

libstd++

libstd++ 是标准的C++的功能库,但是,Android的实现是非常简单的,只是new,delete等少数几个操作符的实现

libthread_db

libthread_db 用来支持对多线程的中动态库的调试

一个模块

Linker模块

Linux系统上其实有两种并不完全相同的可执行文件

Bionic库的内存管理函数

线程

摘录自

Android跨进程通信IPC之2——Bionic