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系统上其实有两种并不完全相同的可执行文件