文档章节

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

 幸福阶梯
发布于 2017/04/26 21:52
字数 3154
阅读 21
收藏 0

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        (时区相关)
 

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 92
码字总数 159283
作品 0
深圳
程序员
Android 源码分析之旅1--系统架构与分析方法、工具

《Android 源码分析之旅》目录 apefwkall.png 《Android 源码分析之旅》的全部目录将作如下安排: 第1章节——本篇文章,将介绍一些基本的概念、方法、工具。 第2章节——着重介绍Binder IP...

猴亮屏
2017/10/19
0
0
使用git工具获取android源代码

Android使用Git管理源代码的,在Linux下我们可以使用ubuntu来获取系统源码,下面我就逐步介绍在Windows些如何获取Android系统源码了。 一。安装msysGit 在google的http://code.google.com/p/...

jxlgzwh
2013/06/17
0
0
CSDN精选Android开发博客

[1] 张国威:Android从入门到提高系列 前面写了十四篇关于界面的入门文章,大家都看完和跟着练习之后,对于常用的Layout和View都会有一定的了解了,接下来的文章就不再强调介绍界面了,而是针...

晨曦之光
2012/02/24
0
0
Android 进阶学习笔记整理

一.android系统架构图及各层介绍 1. 应用层:应用是用java语言编写的运行在虚拟机上的程序,比如通讯录,日历,电话,短信,浏览器等。 2. 应用框架层:这一层是编写Google发布的核心应用时所...

FunCode
07/22
0
0
Android中Preference的使用以及监听事件分析

在Android系统源码中,绝大多数应用程序的UI布局采用了Preference的布局结构,而不是我们平时在模拟器中构建应用程序时使用的View布局结构,例如,Setting模块中布局。当然,凡事都有例外,F...

chuiyuan
2014/07/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sourcetree 离线免注册登录安装教程

Sourcetree是一个优秀的git可视化管理工具,深受开发者喜爱Sourcetree官网,但是在安装时需要谷歌账户登录,需要翻qiang才可以,此一点一直被人们所诟病。今天本教程就为大家提供离线免登陆安...

QQZZFT
15分钟前
1
0
使用 PostgreSQL 解决一个实际的统计分析问题

使用 PostgreSQL 解决一个实际的统计分析问题作者:老农民(刘启华)Email: 46715422@qq.com 之前有个朋友扔给我一个奇葩需求,他们公司之前做了一批问卷调查,全部都是统一格式的excel...

新疆老农民
18分钟前
1
0
TypeScript基础入门之高级类型的映射类型

转发 TypeScript基础入门之高级类型的映射类型 高级类型 映射类型 一个常见的任务是将一个已知的类型每个属性都变为可选的: interface PersonPartial {    name?: string;    age?...

durban
33分钟前
1
0
Dubbo源码分析(6):Dubbo内核实现之基于SPI思想Dubbo内核实现

SPI接口定义 定义了@SPI注解 package com.alibaba.dubbo.common.extension; import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.an......

郑加威
33分钟前
1
0
RxJS的另外四种实现方式(后记)—— 同时实现管道和链式编程

目录 RxJS的另外四种实现方式(序) RxJS的另外四种实现方式(一)——代码最小的库 RxJS的另外四种实现方式(二)——代码最小的库(续) RxJS的另外四种实现方式(三)——性能最高的库 Rx...

一个灰
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部