2019独角兽企业重金招聘Python工程师标准>>>
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 (时区相关)