Android系统源码学习——源码目录结构介绍

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Android 4.0源码目录结构:
本文介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Android源代码的位置。
Android源码体积非常庞大,由Dalvik虚拟机、Linux内核、编译系统、框架代码、Android定制C库、测试套件、系统应用程序等部分组成,在编译Android源码之前,必须要先掌握Android源码的组成。
在Android源码中,按照不同功能代码被放在不同的目录下:

abi目录:应用二进制接口,不同的操作系统,应用二进制接口不同,因此linux上的二进制可执行文件在windows上无法执行。
bionic目录:针对Android系统定制的仿生标准C库、链接器等所在目录,Android系统并没有使用Linux的glibc库。bioinc C库针对嵌入式系统做了优化,添加了一些Android特定的函数API同时大大减少库的体积,也避免了LGPL版权的问题。
bootable目录:这个目录下存放android部分启动相关代码,包括android的recovery模式,一般用于进行OTA升级,由C++编写,可以看到用于显示的ui.cpp和安装的nstall.cpp,模式入口为recovery.cpp的main.
build目录:Android的编译系统目录,里面包含大量的Makefile文件,用来编译目标系统、Host主机开发环境等。这是android源码中编译核心所在地,把这个目录下的所有mk搞清楚,android的编译体系就基本了如指掌了。
cts目录:兼容性测试工具目录。
dalvik目录:Dalvik虚拟机,Android系统得以运行的虚拟执行环境。
development目录:应用程序开发所需要的模板和工具。
devices目录:厂商设备配置目录,针对不同设备,由不同的子目录来分别管理,用来裁剪实现不同设备上Android目标系统。
docs目录:官方网站文档。
external目录:Android系统使用的其它开源代码目录,如jpeg图片解码开源库、opencore开源代码等。
frameworks目录:框架层代码,frameworks/base目录下存放目标系统的框架库,frameworks/policies/base下存放应用程序框架代码。
hardware目录:HAL(Hardware Abstraction Layer)硬件抽象层代码;描述对linuxkernel中的相关驱动模块的具体操作,而在kernel中的驱动模块只拥有通用操作接口,比如设置寄存器值,IO拉高拉低,但是具体设置什么值,拉高拉低的时序都写在hardware层相对应的module中,这就是google对于硬件驱动的商业保护。
kernel目录:Linux内核目录,默认下载的Android源码里没有,需单独下载。
libcore目录:一些有用的库,像xml、Jason、luni。
ndk目录:ndk相关开发工具。
out目录:编译完成后的文件输出与此目录。
packages目录:Android系统级应用程序源码目录,如摄像应用、电话应用等。
prebuilt目录:主机编译工具目录,如arm-linux-gcc交叉系统工具链等。
sdk目录:    SDK及模拟器。
system目录:init进程、蓝牙、无线WIFI工具、uevent进程目录;底层文件系统库、应用及组件——C语言。
Makefile文件:在顶层目录编译,利用的默认Makefile,它只是简单包含了build/core/main.mk。
下面对各个目录分别详细介绍:
1、bionic目录:
|–libc  (C库)
| |–arch-arm  (ARM架构,包含系统调用汇编实现)
| |–arch-x86  (x86架构,包含系统调用汇编实现)
| |–bionic  (由C实现的功能,架构无关)
| |–docs  (文档)
| |–include  (头文件)
| |–inet  (inet相关,具体作用不明)
| |–kernel  (Linux内核中的一些头文件)
| |–netbsd  (系统相关,具体作用不明)
| |–private  (一些私有的头文件)
| |–stdio  (stdio实现)
| |–stdlib  (stdlib实现)
| |–string  (string函数实现)
| |–tools  (几个工具)
| |–tzcode  (时区相关代码)
| |–unistd  (unistd实现)
| |–zoneinfo  (时区信息)
|–libdl  (libdl实现,dl是动态链接,提供访问动态链接库的功能)
|–libm  (libm数学库的实现)
| |–alpha  (alpha架构)
| |–amd64  (amd64架构)
| |–arm  (arm架构)
| |–bsdsrc  (bsd的源码)
| |–i386  (i386架构)
| |–i387  (i387架构)
| |–ia64  (ia64架构)
| |–include  (头文件)
| |–man  (数学函数)
| |–powerpc  (powerpc架构)
| |–sparc64  (sparc64架构)
| |–src  (源代码)
|–libstdc++  (libstdc++  C++头文件)
| |–include  (头文件)
| |–src  (源代码)
|–libthread_db  (多线程程序的调试器库)
| |–include  (头文件)
|–linker  (动态链接器库)
| |–arch  (支持arm和x86两种架构)
2、bootable目录:
|–bootloader  (适合各种bootloader的通用代码)
| |–legacy  (估计不能直接使用,可以参考)
| | |–arch_armv6  (V6架构,几个简单的汇编文件)
| | |–arch_msm7k  (高通K7处理器架构的几个基本驱动)
| | |–include  (通用头文件和高通K7架构文件)
| | |–libboot  (启动库,都写的很简单)
| | |–libc  (一些常用的C函数)
| | |–nandwrite  (nandwrite函数实现)
| | |–usbloader  (usbloader实现)
| |–diskinstaller  (android镜像打包器,x86可生产iso)
| |–recovery  (系统恢复相关)
| | |–applypatch  (补丁工具)
| | |–edify  (升级脚本使用的edify脚本语言)
| | |–etc  (init.rc恢复脚本)
| | |–minelf  (不清楚)
| | |–minui  (一个简单的UI)
| | |–minzip  (一个简单的压缩工具)
| | |–mtdutils  (mtd工具)
| | |–res  (资源文件)
| | |–testdata  (测试数据)
| | |–tools  (工具)
| | | |–ota  (OTA Over The Air Updates升级工具)
| | |–updater  (更新相关)
3、build目录:
|–core  (核心编译规则)
|–lib
| |–host  (主机端库,有android “cp”功能替换)
|–target  (目标机编译对象)
| |–board  (开发平台)
| | |–emulator  (模拟器)
| | |–generic  (通用)
| | |–generic_armv5  (armv5通用)
| |–product  (开发平台对应的编译规则)
| | |–security  (密钥相关)
|–tools  (编译中主机使用的工具及脚本)
| |–acp  (Android "acp" Command)
| |–apicheck  (api检查工具)
| |–atree  (tree工具)
| |–bin2asm  (bin转换为asm工具)
| |–check_prereq  (检查编译时间戳工具)
| |–droiddoc  (作用不明,java语言,网上有人说和JDK5有关)
| |–fs_config  (This program takes a list of files and directories)
| |–fs_get_stats  (获取文件系统状态)
| |–releasetools  (生成镜像的工具及脚本)
| |–rgb2565  (rgb转换为2565)
| |–signapk  (apk签名工具)
| |–zipalign  (zip archive alignment tool)
4、cts兼容性测试工具目录。
5、Dalvik目录:
|-dalvikvm  (main.c的目录)
|–dexdump  (dex反汇编)
|–dexgen  
|–dexlist  (List all methods in all concrete classes in a DEX file.)
|–dexopt  (预验证与优化)
|–docs  (文档)
|–dvz  (和zygote相关的一个命令)
|–dx  (dx工具,将多个java转换为dex)
|–hit  (java语言写成)
|–libdex  (dex的库)
|–libnativehelper  (Support functions for Android's class libraries)
|–tests  (测试代码)
|–tools  (工具)
|–unit-tests  (单元测试)
|–vm  (虚拟机)
6、development目录:
|–apps  (些核心应用程序)
| |–BluetoothDebug  (蓝牙调试程序)
| |–BuildWidget
| |–CustomLocale  (自定义区域设置)
| |–Development  (开发)
| |–Fallback  (和语言相关的一个程序)
| |–FontLab  (字库)
| |–GestureBuilder  (手势动作)
| |–launchperf 
| |–NinePatchLab  
| |–OBJViewer  (OBJ查看器)
| |–SdkSetup  (SDK安装器)
| |–WidgetPreview  (插件预览器)
|–build  (编译脚本模板)
|–cmds  (有个monkey工具)
|–data  (配置数据)
|–docs  (文档)
|–host  (主机端USB驱动等)
|–ide  (集成开发环境)
|–ndk  (本地开发套件——c语言开发套件)
|–pdk  (Plug Development Kit)
|–samples  (各种应用例子)
|–scripts  (脚本)
|–sdk  (sdk配置)
|–testrunner  (测试用)
|–tutorials  (教程)
7、device目录:厂商设备配置目录,针对不同设备,由不同的子目录来分别管理,用来裁剪实现不同设备上Android目标系统。
8、docs目录:官方网站文档。
9、external目录:Android系统使用的其它开源代码目录,如jpeg图片解码开源库、opencore开源代码等。
10、framework目录:
frameworks 目录 (核心框架——java及C++语言)
|– base (基本内容)
| |– api (?都是xml文件,定义了java的api?)
| |– awt (AWT库)
| |– build (空的)
| |– camera (摄像头服务程序库)
| |– cmds (重要命令:am、app_proce等)
| |– core (核心库)
| |– data (字体和声音等数据文件)
| |– docs (文档)
| |– graphics (图形相关)
| |– include (头文件)
| |– keystore (和数据签名证书相关)
| |– libs (库)
| |– location (地区库)
| |– media (媒体相关库)
| |– obex (蓝牙传输库)
| |– opengl (2D-3D加速库)
| |– packages (设置、TTS、VPN程序)
| |– sax (XML解析器)
| |– services (各种服务程序)
| |– telephony (电话通讯管理)
| |– test-runner (测试工具相关)
| |– tests (各种测试)
| |– tools (一些叫不上名的工具)
| |– vpn (VPN)
| |– wifi (无线网络)
|– opt (可选部分)
| |– com.google.android (有个framework.jar)
| |– com.google.android.googlelogin (有个client.jar)
| |– emoji (standard message elements)
|– policies Product policies are operating system directions aimed at specific uses)
|– base
|– mid (MID设备)
|– phone (手机类设备,一般用这个)
11、hardware目录:
hardware 目录 (部分厂家开源的硬解适配层HAL代码)
|– broadcom (博通公司)
| |– wlan (无线网卡)
|– libhardware (硬件库)
| |– include (头文件)
| |– modules (Default (and possibly architecture dependents) HAL modules)
| |– gralloc (gralloc显示相关)
| |– overlay (Skeleton for the "overlay" HAL module.)
|– libhardware_legacy (旧的硬件库)
| |– flashlight (背光)
| |– gps (GPS)
| |– include (头文件)
| |– mount (旧的挂载器)
| |– power (电源)
| |– qemu (模拟器)
| |– qemu_tracing (模拟器跟踪)
| |– tests (测试)
| |– uevent (uevent)
| |– vibrator (震动)
| |– wifi (无线)
|– msm7k (高通7k处理器开源抽象层)
| |– boot (启动)
| |– libaudio (声音库)
| |– libaudio-qsd8k (qsd8k的声音相关库)
| |– libcamera (摄像头库)
| |– libcopybit (copybit库)
| |– libgralloc (gralloc库)
| |– libgralloc-qsd8k (qsd8k的gralloc库)
| |– liblights (背光库)
| |– librpc (RPC库)
|– ril (无线电抽象层)
| |– include (头文件)
| |– libril (库)
| |– reference-cdma-sms (cdma短信参考)
| |– reference-ril (ril参考)
| |– rild (ril后台服务程序)
|– ti (ti公司开源HAL)
|– omap3 (omap3处理器)
| |– dspbridge (DSP桥)
| |– libopencorehw (opencore硬件库)
| |– liboverlay (overlay硬件库)
| |– libstagefrighthw (stagefright硬件库)
| |– omx (omx组件)
|– wlan (无线网卡)
12、packages目录:
packages 目录
|– apps                  (应用程序库)
| |– AlarmClock             (闹钟)
| |– Bluetooth                (蓝牙)
| |– Browser                (浏览器)
| |– Calculator                (计算器)
| |– Calendar                (日历)
| |– Camera                 (相机)
| |– CertInstaller            (在Android中安装数字签名,被调用)
| |– Contacts                (拨号(调用)、联系人、通话记录)
| |– DeskClock                (桌面时钟)
| |– Email                        (Email)
| |– Gallery                      (相册,和Camera类似,多了列表)
| |– Gallery3D                (?3D相册)
| |– GlobalSearch        (为google搜索服务,提供底层应用)
| |– GoogleSearch        (google搜索)
| |– HTMLViewer       (浏览器附属界面,被浏览器应用调用,同时提供存储记录功能)
| |– IM                        (即时通讯,为手机提供信号发送、接收、通信的服务)
| |– Launcher            (登陆启动项,显示图片框架等等图形界面)
| |– Launcher2            (登陆启动项,负责应用的调用)
| |– Mms                  (?彩信业务)
| |– Music                 (音乐播放器)
| |– PackageInstaller        (安装、卸载程序的响应)
| |– Phone                     (电话拨号程序)
| |– Provision                (预设应用的状态,使能应用)
| |– Settings   (开机设定,包括电量、蓝牙、设备信息、界面、wifi等)
| |– SoundRecorder        (录音机,可计算存储所需空间和时间)
| |– Stk                         (接收和发送短信)
| |– Sync         (空)   ——-○1
| |– Updater              (空)
| |– VoiceDialer                (语音识别通话)
|– inputmethods                (输入法)
| |– LatinIME                (拉丁文输入法)
| |– OpenWnn                (OpenWnn输入法)
| |– PinyinIME                (拼音输入法)
|– providers           (提供器,提供应用程序、界面所需的数据)
| |– ApplicationsProvider(应用程序提供器,提供应用程序启动项、更新等)
| |– CalendarProvider                        (日历提供器)
| |– ContactsProvider                        (联系人提供器)
| |– DownloadProvider                (下载管理提供器)
| |– DrmProvider                        (创建和更新数据库时调用)
| |– GoogleContactsProvider  (联系人提供器的子类,用以同步联系人)
| |– GoogleSubscribedFeedsProvider(设置信息提供器)
| |– ImProvider                 (空)
| |– ManagementProvider        (空)
| |– MediaProvider             (媒体提供器,提供存储数据)
| |– TelephonyProvider         (彩信提供器)
| |– UserDictionaryProvider        (用户字典提供器,提供用户常用字字典)
| |– WebSearchProvider                (空)
|– services                                        
| |– EasService                                (空)
| |– LockAndWipe                        (空)
|– wallpapers                                        (墙纸)
| |– Basic         (基本墙纸,系统内置墙纸)
| |– LivePicker            (选择动态壁纸)
| |– MagicSmoke           (壁纸特殊效果)
| |– MusicVisualization      (音乐可视化,图形随音乐而变化)
13、prebuilt目录:
prebuilt 目录 (x86和arm架构下预编译的一些资源)
|– android-arm     (arm-android相关)
| |– gdbserver         (gdb调试器)
| |– kernel      (模拟的arm内核)
|– android-x86     (x86-android相关)
| |– kernel           (空的)
|– common       (通用编译好的代码,应该是java的)
|– darwin-x86        (drawin x86平台)
| |– toolchain           (工具链)
| | |– arm-eabi-4.2.1        
| | |– arm-eabi-4.3.1        
| | |– arm-eabi-4.4.0        
|– darwin-x86_64   (drawin x86 64bit平台)
|– linux-x86          (linux x86平台)
| |– toolchain                (工具链,我们应该主要用这个)
| | |– arm-eabi-4.2.1        
| | |– arm-eabi-4.3.1        
| | |– arm-eabi-4.4.0        
| | |– i686-unknown-linux-gnu-4.2.1        (x86版编译器)
|– linux-x86_64     (linux x86 64bit平台)
|– windows              (windows平台)
|– windows-x86_64      (64bit windows平台)
14、system目录:
system 目录        (底层文件系统库、应用及组件——C语言)
|– Bluetooth         (蓝牙相关)
|– core        (系统核心工具盒接口)
| |– adb                (adb调试工具)
| |– cpio                (cpio工具,创建img)
| |– debuggerd        (调试工具)
| |– fastboot        (快速启动相关)
| |– include                (系统接口头文件)
| |– init                (init程序源代码)
| |– libacc                (轻量级C编译器)
| |– libctest                (libc测试相关)
| |– libcutils        (libc工具)
| |– liblog                (log库)
| |– libmincrypt        (加密库)
| |– libnetutils        (网络工具库)
| |– libpixelflinger        (图形处理库)
| |– libsysutils        (系统工具库)
| |– libzipfile        (zip库)
| |– logcat                (查看log工具)
| |– logwrapper        (log封装工具)
| |– mkbootimg        (制作启动boot.img的工具盒脚本)
| |– netcfg                (网络配置netcfg源码)
| |– nexus                (google最新手机的代码)
| |– rootdir                (rootfs,包含一些etc下的脚本和配置)
| |– sh                        (shell代码)
| |– toolbox                (toolbox,类似busybox的工具集)
|– vold                (SD卡管理器)
|– extras                (额外工具)
| |– latencytop a tool for software developers,identifying system latency happen)
| |– libpagemap        (pagemap库)
| |– librank                (Java Library Ranking System库)
| |– procmem        (pagemap相关)
| |– procrank        (Java Library Ranking System相关)
| |– showmap        (showmap工具)
| |– showslab        (showslab工具)
| |– sound                (声音相关)
| |– su                        (su命令源码)
| |– tests                (一些测试工具)
| |– timeinfo        (时区相关)
 

转载于:https://my.oschina.net/cht2000/blog/887938

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

Published by

风君子

独自遨游何稽首 揭天掀地慰生平