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 (时区相关)
转载于:https://my.oschina.net/cht2000/blog/887938