zoukankan      html  css  js  c++  java
  • ANDROID 源码结构(转)

     http://www.cnblogs.com/Tiger-Dog/articles/2023281.html

    Google提供的Android手机开发平台包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示: 


    |-- Makefile        (全局的Makefile) 
    |-- bionic          (Bionic C库) 
    |-- bootloader      (引导相关代码) 
    |-- build           (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具) 
    |-- cts           (Android兼容性测试套件标准) 
    |-- dalvik          (JAVA虚拟机) 
    |-- development     (程序开发所需要的模板和工具) 
    |-- external        (目标机器使用的一些库,android使用的一些开源的模组) 
    |-- frameworks      (应用程序的框架层 核心框架) 
    |-- fw_tools
    |-- hardware        (部分厂家开源的硬解适配层HAL代码) 
    |-- out                      (编译完成后的代码输出与此目录) 
    |-- kernel          (Linux2.6的源代码) 
    |-- packages        (Android的各种应用程序) 
    |-- prebuilt        (Android在各种平台下编译的预置脚本) 
    |-- sdk      (sdk及模拟器) 
    |-- system          (底层文件系统库、应用及组件——C语言) 
    `-- vendor          (厂商定制代码) 

    bionic目录展开一个级别的目录如下所示: 
    bionic 目录 
    |-- libc                        (C库) 
    |   |-- arch-arm        (ARM架构,包含系统调用汇编实现) 
    |   |-- arch-x86        (x86架构,包含系统调用汇编实现) 
    |   |-- bionic                (由C实现的功能,架构无关) 
    |   |-- docs                (文档) 
    |   |-- include                (头文件) 
    |   |-- inet                (inet相关,具体作用不明) 
    |   |-- kernel                (Linux内核中的一些头文件) 
    |   |-- netbsd                (nesbsd系统相关,具体作用不明) 
    |   |-- private                (一些私有的头文件) 
    |   |-- stdio                (stdio实现) 
    |   |-- stdlib                (stdlib实现) 
    |   |-- string                (string函数实现) 
    |   |-- tools                (几个工具) 
    |   |-- tzcode                (时区相关代码) 
    |   |-- unistd                (unistd实现) 
    |   `-- zoneinfo        (时区信息) 
    |-- libdl                        (libdl实现,dl是动态链接,提供访问动态链接库的功能) 
    |-- libm                        (libm数学库的实现,) 
    |   |-- alpha                (apaha架构) 
    |   |-- amd64                (amd64架构) 
    |   |-- arm                (arm架构) 
    |   |-- bsdsrc                (bsd的源码) 
    |   |-- i386                (i386架构) 
    |   |-- i387                (i387架构) 
    |   |-- ia64                (ia64架构) 
    |   |-- include                (头文件) 
    |   |-- man                (数学函数,后缀名为.3,一些为freeBSD的库文件) 
    |   |-- powerpc        (powerpc架构) 
    |   |-- sparc64                (sparc64架构) 
    |   `-- src                (源代码) 
    |-- libstdc++                (libstdc++ C++实现库) 
    |   |-- include                (头文件) 
    |   `-- src                (源码) 
    |-- libthread_db        (多线程程序的调试器库) 
    |   `-- include                (头文件) 
    `-- linker                        (动态链接器) 
    `-- arch                (支持arm和x86两种架构) 


    bootloader目录展开的两个级别目录: 
    bootloader/ 

    |-- bootloader                                (适合各种bootloader的通用代码) 
    |   `-- legacy                                (估计不能直接使用,可以参考) 
    |       |-- arch_armv6                (V6架构,几个简单的汇编文件) 
    |       |-- arch_msm7k                (高通7k处理器架构的几个基本驱动) 
    |       |-- include                        (通用头文件和高通7k架构头文件) 
    |       |-- libboot                        (启动库,都写得很简单) 
    |       |-- libc                        (一些常用的c函数) 
    |       |-- nandwrite                (nandwirte函数实现) 
    |       `-- usbloader                (usbloader实现) 
    |-- diskinstaller                        (android镜像打包器,x86可生产iso) 
    `-- recovery                                (系统恢复相关) 
    |-- edify                                (升级脚本使用的edify脚本语言) 
    |-- etc                                (init.rc恢复脚本) 
    |-- minui                                (一个简单的UI) 
    |-- minzip                                (一个简单的压缩工具) 
    |-- mtdutils                        (mtd工具) 
    |-- res                                (资源) 
    |   `-- images                        (一些图片) 
    |-- tools                                (工具) 
    |   `-- ota                        (OTA Over The Air Updates升级工具) 
    `-- updater                        (升级器) 



    build目录展开的一个级别的目录如下所示: 

    |-- bootloader                                (适合各种bootloader的通用代码) 
    |   `-- legacy                                (估计不能直接使用,可以参考) 
    |       |-- arch_armv6                (V6架构,几个简单的汇编文件) 
    |       |-- arch_msm7k                (高通7k处理器架构的几个基本驱动) 
    |       |-- include                        (通用头文件和高通7k架构头文件) 
    |       |-- libboot                        (启动库,都写得很简单) 
    |       |-- libc                        (一些常用的c函数) 
    |       |-- nandwrite                (nandwirte函数实现) 
    |       `-- usbloader                (usbloader实现) 
    |-- diskinstaller                        (android镜像打包器,x86可生产iso) 
    `-- recovery                                (系统恢复相关) 
    |-- edify                                (升级脚本使用的edify脚本语言) 
    |-- etc                                (init.rc恢复脚本) 
    |-- minui                                (一个简单的UI) 
    |-- minzip                                (一个简单的压缩工具) 
    |-- mtdutils                        (mtd工具) 
    |-- res                                (资源) 
    |   `-- images                        (一些图片) 
    |-- tools                                (工具) 
    |   `-- ota                        (OTA Over The Air Updates升级工具) 
    `-- updater                        (升级器) 

    build目录 

    |-- core                                (核心编译规则) 
    |-- history                                (历史记录) 
    |-- libs                                
    |   `-- host                        (主机端库,有android “cp”功能替换) 
    |-- target                                (目标机编译对象) 
    |   |-- board                        (开发平台) 
    |   |   |-- emulator        (模拟器) 
    |   |   |-- generic                (通用) 
    |   |   |-- idea6410        (自己添加的) 
    |   |   `-- sim                (最简单) 
    |   `-- product                (开发平台对应的编译规则) 
    |       `-- security        (密钥相关) 
    `-- tools                                (编译中主机使用的工具及脚本) 
    |-- acp                        (Android "acp" Command) 
    |-- apicheck                (api检查工具) 
    |-- applypatch                (补丁工具) 
    |-- apriori                        (预链接工具) 
    |-- atree                        (tree工具) 
    |-- bin2asm                (bin转换为asm工具) 
    |-- check_prereq        (检查编译时间戳工具) 
    |-- dexpreopt                (模拟器相关工具,具体功能不明) 
    |-- droiddoc                (作用不明,java语言,网上有人说和JDK5有关) 
    |-- fs_config                (This program takes a list of files and directories) 
    |-- fs_get_stats                (获取文件系统状态) 
    |-- iself                        (判断是否ELF格式) 
    |-- isprelinked                (判断是否prelinked) 
    |-- kcm                        (按键相关) 
    |-- lsd                        (List symbol dependencies) 
    |-- releasetools                (生成镜像的工具及脚本) 
    |-- rgb2565                (rgb转换为565) 
    |-- signapk                (apk签名工具) 
    |-- soslim                        (strip工具) 
    `-- zipalign                (zip archive alignment tool) 



    其中,core中的Makefile是整个Android编译所需要的真正的Makefile,它被顶层目录的Makefile引用。 
    envsetup.sh是一个在使用仿真器运行的时候,用于设置环境的脚本。 
    dalvik目录用于提供Android JAVA应用程序运行的基础————JAVA虚拟机。 
    development目录展开的一个级别的目录如下所示: 
    |-- apps                                (一些核心应用程序) 
    |   |-- BluetoothDebug        (蓝牙调试程序) 
    |   |-- CustomLocale        (自定义区域设置) 
    |   |-- Development        (开发) 
    |   |-- Fallback                (和语言相关的一个程序) 
    |   |-- FontLab                (字库) 
    |   |-- GestureBuilder        (手势动作) 
    |   |-- NinePatchLab        () 
    |   |-- OBJViewer                (OBJ查看器) 
    |   |-- SdkSetup                (SDK安装器) 
    |   |-- SpareParts                (高级设置) 
    |   |-- Term                        (远程登录) 
    |   `-- launchperf                () 
    |-- build                                (编译脚本模板) 
    |-- cmds                                (有个monkey工具) 
    |-- data                                (配置数据) 
    |-- docs                                (文档) 
    |-- host                                (主机端USB驱动等) 
    |-- ide                                (集成开发环境) 
    |-- ndk                                (本地开发套件——c语言开发套件) 
    |-- pdk                                (Plug Development Kit) 
    |-- samples                        (例程) 
    |   |-- AliasActivity        () 
    |   |-- ApiDemos                (API演示程序) 
    |   |-- BluetoothChat        (蓝牙聊天) 
    |   |-- BrowserPlugin        (浏览器插件) 
    |   |-- BusinessCard        (商业卡) 
    |   |-- Compass                (指南针) 
    |   |-- ContactManager        (联系人管理器) 
    |   |-- CubeLiveWallpaper        (动态壁纸的一个简单例程) 
    |   |-- FixedGridLayout        (像是布局) 
    |   |-- GlobalTime                (全球时间) 
    |   |-- HelloActivity        (Hello) 
    |   |-- Home                        (Home) 
    |   |-- JetBoy                        (jetBoy游戏) 
    |   |-- LunarLander        (貌似又是一个游戏) 
    |   |-- MailSync                (邮件同步) 
    |   |-- MultiResolution        (多分辨率) 
    |   |-- MySampleRss        (RSS) 
    |   |-- NotePad                (记事本) 
    |   |-- RSSReader                (RSS阅读器) 
    |   |-- SearchableDictionary        (目录搜索) 
    |   |-- SimpleJNI                (JNI例程) 
    |   |-- SkeletonApp        (空壳APP) 
    |   |-- Snake                        (snake程序) 
    |   |-- SoftKeyboard        (软键盘) 
    |   |-- Wiktionary                (维基) 
    |   `-- WiktionarySimple(维基例程) 
    |-- scripts                                (脚本) 
    |-- sdk                                (sdk配置) 
    |-- simulator                        (模拟器) 
    |-- testrunner                        (测试用) 
    `-- tools                                (一些工具) 



    在emulator目录中qemud是使用QEMU仿真时目标机器运行的后台程序,skins是仿真时手机的界面。 
    samples中包含了很多Android简单工程,这些工程为开发者学习开发Android程序提供了很大便利,可以作为模板使用。 
    external目录展开的一个级别的目录如下所示: 
    external/ 
    |-- aes 
    |-- apache-http 
    |-- bluez 
    |-- clearsilver 
    |-- dbus 
    |-- dhcpcd 
    |-- dropbear 
    |-- elfcopy 
    |-- elfutils 
    |-- emma 
    |-- esd 
    |-- expat 
    |-- fdlibm 
    |-- freetype 
    |-- gdata 
    |-- giflib 
    |-- googleclient 
    |-- icu4c 
    |-- iptables 
    |-- jdiff 
    |-- jhead 
    |-- jpeg 
    |-- libffi 
    |-- libpcap 
    |-- libpng 
    |-- libxml2 
    |-- netcat 
    |-- netperf 
    |-- neven 
    |-- opencore 
    |-- openssl 
    |-- oprofile 
    |-- ping 
    |-- ppp 
    |-- protobuf 
    |-- qemu 
    |-- safe-iop 
    |-- skia 
    |-- sonivox 
    |-- sqlite 
    |-- srec 
    |-- strace 
    |-- tagsoup 
    |-- tcpdump 
    |-- tinyxml 
    |-- tremor 
    |-- webkit 
    |-- wpa_supplicant 
    |-- yaffs2 
    `-- zlib 



    在external中,每个目录表示Android目标系统中的一个模块,可能有一个或者若干个库构成。其中: 
    opencore为PV(PacketVideo),它是Android多媒体框架的核心。 
    webkit是Android网络浏览器的核心。 
    sqlite是Android数据库系统的核心。 
    openssl是Secure Socket Layer,一个网络协议层,用于为数据通讯提供安全支持。 
    frameworks目录展开的一个级别的目录如下所示: 
    frameworks/ 
    |-- base 
    |-- opt 
    `-- policies 



    frameworks是Android应用程序的框架。 
    hardware是一些与硬件相关的库 
    kernel是Linux2.6的源代码 

    packages目录展开的两个级别的目录如下所示: 
    packages/ 
    |-- apps 
    |   |-- AlarmClock 
    |   |-- Browser 
    |   |-- Calculator 
    |   |-- Calendar 
    |   |-- Camera 
    |   |-- Contacts 
    |   |-- Email 
    |   |-- GoogleSearch 
    |   |-- HTMLViewer 
    |   |-- IM 
    |   |-- Launcher 
    |   |-- Mms 
    |   |-- Music 
    |   |-- PackageInstaller 
    |   |-- Phone 
    |   |-- Settings 
    |   |-- SoundRecorder 
    |   |-- Stk 
    |   |-- Sync 
    |   |-- Updater 
    |   `-- VoiceDialer 
    `-- providers 
    |-- CalendarProvider 
    |-- ContactsProvider 
    |-- DownloadProvider 
    |-- DrmProvider 
    |-- GoogleContactsProvider 
    |-- GoogleSubscribedFeedsProvider 
    |-- ImProvider 
    |-- MediaProvider 
    `-- TelephonyProvider 



    packages中包含两个目录,其中apps中是Android中的各种应用程序,providers是一些内容提供者(在Android中的一个数据源)。 
    packages中两个目录的内容大都是使用JAVA编写的程序,各个文件夹的层次结构是类似的。 
    prebuilt目录展开的一个级别的目录如下所示: 
    prebuilt/ 
    |-- Android.mk 
    |-- android-arm 
    |-- common 
    |-- darwin-x86 
    |-- linux-x86 
    `-- windows 



    system目录展开的两个级别的目录如下所示: 
    system/ 
    |-- bluetooth 
    |   |-- bluedroid 
    |   `-- brfpatch 
    |-- core 
    |   |-- Android.mk 
    |   |-- README 
    |   |-- adb 
    |   |-- cpio 
    |   |-- debuggerd 
    |   |-- fastboot 
    |   |-- include            (各个库接口的头文件) 
    |   |-- init 
    |   |-- libctest 
    |   |-- libcutils 
    |   |-- liblog 
    |   |-- libmincrypt 
    |   |-- libnetutils 
    |   |-- libpixelflinger 
    |   |-- libzipfile 
    |   |-- logcat 
    |   |-- logwrapper 
    |   |-- mkbootimg 
    |   |-- mountd 
    |   |-- netcfg 
    |   |-- rootdir 
    |   |-- sh 
    |   `-- toolbox 
    |-- extras 
    |   |-- Android.mk 
    |   |-- latencytop 
    |   |-- libpagemap 
    |   |-- librank 
    |   |-- procmem 
    |   |-- procrank 
    |   |-- showmap 
    |   |-- showslab 
    |   |-- sound 
    |   |-- su 
    |   |-- tests 
    |   `-- timeinfo 
    `-- wlan 
    `-- ti 

    Android编译完成后的代码结构 
    Android编译完成后,将在根目录中生成一个out文件夹,所有生成的内容均放置在这个文件夹中。out文件夹如下所示: 

    out/ 

    |-- CaseCheck.txt 

    |-- casecheck.txt 

    |-- host 

    |   |-- common 

    |   `-- linux-x86 

    `-- target 

    |-- common 

    `-- product 



    主要的两个目录为host和target,前者表示在主机(x86)生成的工具,后者表示目标机(模认为ARMv5)运行的内容。 



    host目录的结构如下所示: 

    out/host/ 

    |-- common 

    |   `-- obj              (JAVA库) 

    `-- linux-x86 

    |-- bin              (二进制程序) 

    |-- framework        (JAVA库,*.jar文件) 

    |-- lib              (共享库*.so) 

    `-- obj              (中间生成的目标文件) 

    host目录是一些在主机上用的工具,有一些是二进制程序,有一些是JAVA的程序。 



    target目录的结构如下所示: 

    out/target/ 

    |-- common 

    |   |-- R           (资源文件) 

    |   |-- docs 

    |   `-- obj         (目标文件) 

    `-- product 

    `-- generic 

    其中common目录表示通用的内容,product中则是针对产品的内容。 

    在common目录的obj中,包含两个重要的目录: 

    APPS  中包含了JAVA应用程序生成的目标,每个应用程序对应其中一个子目录,将结合每个应用程序的原始文件生成Android应用程序的APK包。 

    JAVA_LIBRARIES  中包含了JAVA的库,每个库对应其中一个子目录。 



    在默认的情况下,Android编译将生成generic目录,如果选定产品还可以生成其他的目录。generic包含了以下内容: 

    out/target/product/generic/ 

    |-- android-info.txt 

    |-- clean_steps.mk 

    |-- data 

    |-- obj 

    |-- ramdisk.img 

    |-- root 

    |-- symbols 

    |-- system 

    |-- system.img 

    |-- userdata-qemu.img 

    `-- userdata.img 



    在generic/obj/APPS目录中包含了各种JAVA应用,与common/APPS相对应,但是已经打成了APK包。 

    system目录是主要的文件系统,data目录是存放数据的文件系统。 

    obj/SHARED_LIBRARIES中存放所有动态库。 

    obj/STATIC_LIBRARIES中存放所有静态库。 

    几个以img为结尾的文件是几个目标映像文件,其中ramdisk是作为内存盘的根文件系统映像,system.img是主要文件系统的映像,这是一个比较大的文件,data.img是数据内容映像。这几个image文件是运行时真正需要的文件 
  • 相关阅读:
    MFC的序列化的一点研究.
    一次LoadRunner的CPC考试经历
    LAMP架构上(一)
    文件和目录管理
    如何在Linux上清理内存缓存、缓冲与交换空间
    Linux Shell基础(下)
    防火墙(上)
    LAMP架构(三)
    LNMP(二)
    LNMP(一)
  • 原文地址:https://www.cnblogs.com/ahuo/p/2528935.html
Copyright © 2011-2022 走看看