Android系统级深入开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.4 编译Android结果

Android系统编译完成的结果全部在其根目录的out目录中,原始的各个工程不会改动。默认情况下编译的是名称为generic的产品,表示通用的产品。

Android编译的结果包含以下的内容:

主机工具和其依赖的内容(out/host/)

目标机程序(out/target/)

目标机映像文件(out/target/product/{产品名称})

out目录的结构如下所示(带有[]表示是目录):

    out/
    |-- host                              [ 主机内容 ]
    |   |-- common                       [ 主机的通用内容 ]
    |   |   `-- obj
    |   `-- linux-x86                   [ 编译所生成的主机Linux上运行的工具 ]
    |       |-- bin
    |       |-- framework
    |       |-- lib
    |       `-- obj
    `-- target                           [ 目标机内容 ]
        |-- common                       [ 目标机的通用内容 ]
        |   |-- R
        |   |-- docs
        |   `-- obj
        `-- product                      [ 目标机的产品目录 ]
            `-- generic

其中out/target/product目录是目标产品的目录,在默认的情况下使用generic作为目标产品的名称,目录结构如下所示(带有[]表示是目录):

    out/target/product/generic/
    |-- android-info.txt
    |-- clean_steps.mk
    |-- data                              [ 数据目录 ]
    |-- installed-files.txt
    |-- obj                               [ 中间目标文件目录 ]
    |   |-- APPS                         [ Java应用程序包 ]
    |   |-- ETC                           [ 运行时配置文件 ]
    |   |-- EXECUTABLES                 [ 可执行程序 ]
    |   |-- KEYCHARS
    |   |-- NOTICE.html
    |   |-- NOTICE.html.gz
    |   |-- NOTICE_FILES
    |   |-- PACKAGING
    |   |-- SHARED_LIBRARIES           [ 动态库(共享库)]
    |   |-- STATIC_LIBRARIES           [ 静态库(归档文件)]
    |   |-- include
    |   `-- lib
    |-- previous_build_config.mk
    |-- ramdisk.img                     根文件系统映像
    |-- root                              [ 根文件系统目录 ]
    |-- symbols                          [ 符号的目录 ]
    |-- system                           [ 主文件系统目录 ]
    |-- system.img                      主文件系统映像
    |-- userdata-qemu.img              QEMU的数据映像
    `-- userdata.img                    数据映像

其中root、system、data这3个目录分别是目标根文件系统、主文件系统和数据文件系统的目录,后缀名为.img的文件分别是它们所对应的映像文件。目录obj中的内容是目标机的各个目标:EXECUTABLES为可执行程序,SHARED_LIBRARIES为动态库, STATIC_LIBRARIES为静态库,APPS为Android中的应用程序包(*.apk)。