Android 源代码目录结构1 - bionic

Bionic是Android的C library。libc是GNU/Linux以及其他类Unix系统的基础函数库,最常用的就是GNU的libc,也叫glibc。Android之所以采用bionic而不是glibc,有几个原因:

  • 版权问题,因为glibc是LGPL
  • 库的体积和速度,bionic要比glibc小很多。
  • 提供了一些Android特定的函数,getprop LOGI等

Bionic Libc有如下特点:

  • 采用BSD License, 而不是glibc的GPL License;
  • 大约有200KB, 比glibc小很多,且比glibc要快;
  • 实现了一个更小,更快的pthread;
  • 提供了Android所需要的重要函数,如getprop LOGI等
  • 不完全支持POXIC标注,譬如C++ exceptions, wide chars等;
  • 不支持libthread_db和libm的实现
以下是bionic的目录结构,我们逐一分析

|-- Android.mk

|-- CleanSpec.mk
|-- libc   (c 库)
|   |-- Android.mk
|   |-- arch-arm  (arm构架相关的实现,主要是针对arm的优化,以及和处理器相关的调用)
|   |-- arch-sh
|   |-- arch-x86  (x86架构相关的实现)
|   |-- bionic
|   |-- CAVEATS
|   |-- docs
|   |-- include
|   |-- inet
|   |-- Jamfile
|   |-- kernel
|   |-- MODULE_LICENSE_BSD
|   |-- netbsd
|   |-- NOTICE
|   |-- private
|   |-- README
|   |-- regex
|   |-- stdio
|   |-- stdlib
|   |-- string
|   |-- SYSCALLS.TXT
|   |-- tools
|   |-- tzcode
|   |-- unistd
|   |-- wchar
|   `-- zoneinfo
|-- libdl       (动态链接库访问接口 dlopen dlsym dlerror dlclose dladdr的实现)
|   |-- Android.mk
|   |-- arch-sh
|   |-- dltest.c
|   |-- libdl.c
|   |-- MODULE_LICENSE_BSD
|   `-- NOTICE
|-- libm   (C数学函数库, 提供了常见的数序函数和浮点运算)
|   |-- alpha
|   |-- amd64
|   |-- Android.mk
|   |-- arm
|   |-- bsdsrc
|   |-- fpclassify.c
|   |-- i386
|   |-- i387
|   |-- ia64
|   |-- include
|   |-- isinf.c
|   |-- Makefile-orig
|   |-- man
|   |-- MODULE_LICENSE_BSD_LIKE
|   |-- NOTICE
|   |-- powerpc
|   |-- sh
|   |-- sincos.c
|   |-- sparc64
|   `-- src
|-- libstdc++  (standard c++ lib)
|   |-- Android.mk
|   |-- include
|   |-- MODULE_LICENSE_BSD
|   |-- NOTICE
|   `-- src
|-- libthread_db (线程调试库,可以利用此库对多线程程序进行调试)
|   |-- Android.mk
|   |-- include
|   |-- libthread_db.c
|   |-- MODULE_LICENSE_BSD
|   `-- NOTICE
|-- linker (Android dynamic linker)
|   |-- Android.mk
|   |-- arch
|   |-- ba.c
|   |-- ba.h
|   |-- debugger.c
|   |-- dlfcn.c
|   |-- linker.c
|   |-- linker_debug.h
|   |-- linker_format.c
|   |-- linker_format.h
|   |-- linker.h
|   |-- MODULE_LICENSE_APACHE2
|   |-- NOTICE
|   |-- README.TXT
|   `-- rt.c
|-- MAINTAINERS

`-- ThirdPartyProject.prop


Android.mk bionoc libc模块的Makefile

 17 LOCAL_PATH := $(call my-dir)
 18
 19 ifneq ($(TARGET_SIMULATOR),true)
 20   include $(call all-subdir-makefiles)
 21 else
 22   # The host dalvikvm needs Android's concatenated & indexed timezone data.
 23   include $(LOCAL_PATH)/libc/zoneinfo/Android.mk
 24 endif

非simulator编译情况下,会包含所有子目录下的.mk文件



  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值