原始Android的目标机代码构造

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

.

|-- Makefile        (全局的Makefile)

|-- bionic          (Bionic含义为仿生,这里面是一些基础的库的源代码)

|-- bootloader      (引导加载器)

|-- build           (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)

|-- dalvik          (JAVA虚拟机)

|-- development     (程序开发所需要的模板和工具)

|-- external        (目标机器使用的一些库)

|-- frameworks      (应用程序的框架层)

|-- hardware        (与硬件相关的库)

|-- kernel          (Linux2.6的源代码)

|-- packages        (Android的各种应用程序)

|-- prebuilt        (Android在各种平台下编译的预置脚本)

|-- recovery        (与目标的恢复功能相关)

`-- system          (Android的底层的一些库)

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

bionic/

|-- Android.mk

|-- libc

|-- libdl

|-- libm

|-- libstdc++

|-- libthread_db

`-- linker

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

bootloader/

`-- legacy

    |-- Android.mk

    |-- README

    |-- arch_armv6

    |-- arch_msm7k

    |-- fastboot_protocol.txt

    |-- include

    |-- libboot

    |-- libc

    |-- nandwrite

    `-- usbloader

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

build/

|-- buildspec.mk.default

|-- cleanspec.mk

|-- core                       (各种以mk为结尾的文件,它门是编译所需要的Makefile)

|-- envsetup.sh

|-- libs

|-- target                     (包含board和product两个目录,为目标所需要文件)

`-- tools                      (编译过程中主机所需要的工具,一些需要经过编译生成)

      其中,core中的Makefile是整个Android编译所需要的真正的Makefile,它被顶层目录的Makefile引用。

      envsetup.sh是一个在使用仿真器运行的时候,用于设置环境的脚本。

      dalvik目录用于提供Android JAVA应用程序运行的基础————JAVA虚拟机。

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

development

|-- apps                       (Android应用程序的模板)

|-- build                      (编译脚本模板)

|-- cmds

|-- data

|-- docs

|-- emulator                   (仿真相关)

|-- host                       (包含windows平台的一些工具)

|-- ide

|-- pdk

|-- samples                    (一些示例程序)

|-- simulator                  (大多是目标机器的一些工具)

`-- 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