美文网首页AOSP开发入门Android开发
AOSP下常用工作目录和ABS编译流程

AOSP下常用工作目录和ABS编译流程

作者: RexHuang | 来源:发表于2018-09-25 15:26 被阅读0次

    1. 常见AOSP目录

    目录名 介绍
    build/core/ AOSP整个编译过程中核心的编译规则makefile
    build/envsetup.sh 编译初始化脚本
    build/target AOSP自带的Target(模拟器)的一些makefile
    build/tools/ 编译中使用的shell及python写的工具脚本
    packagess 系统app以及一些provider,输入法等桌面看不到的app
    framework/av/ 多媒体相关的native层源码目录
    framework/webview/ 浏览器内核chromium的源码目录
    framework/native/ power、surface、input、binder等服务的native层实现源码目录
    framework/base/core/ framework.jar、framework-res.apk、libandroid_runtime.so等的源文件
    framework/base/native/ libandroid.so的源代码目录.java中的api的native实现.比如looper,assertManager
    framework/base/media/ 多媒体相关的JavaApi和jni层的源文件
    framework/base/packages/ SettingProviders,SystemUI等不在桌面启动的APP源码
    framework/base/service/ service.jar、libandroid_service.so的源文件
    framework/base/service/ wifi服务相关的JavaApi,WifiManager,WifiService等
    device/(vendor_name)/(product_name) 跟某些厂商的某个硬件平台相关的内核,硬件配置等
    vendor/(vendor_name)/(product_name) 厂商对AOSP进行的修改或者定制,放在vendor目录。包括但不限于framework层新增API,新增APP等业务需求,但是现在Google更推荐放在devices目录下
    /out/host 该目录下包含了针对当前操作系统所编译出的Android开发工具产物,例如adb,aapt,fastboot等命令
    /out/target/common/ 该目录包含了针对Android设备的通用的编译产物,主要是java应用代码和java库。Framework.jar,services.jar,android.policy.jar等等
    /out/target/(product)/(product_name) 包含了针对特定设备的编译结果以及平台相关的C/C++库和二进制文件。其中,product_name是具体目标设备的名称

    2. AndroidBuildSystem

    andorid build系统用来编译android系统,android sdk以及相关文档.该系统主要由make文件,shell脚本以及python脚本组成,在编译时能够支持面向不同的硬件设备,不同的编译类型,且提供面向各个厂商的定制扩展

    2.1 什么是makefile

    makefile是一些有特定语法的,可供make命令读取并执行的脚本性质的配置文件。作用就是可以告知编译系统,对哪些源文件进行编译,怎么编译,怎么处理依赖关系。makefile可以定义变量,函数,调用系统命令,shell、python脚本,管理module之间的依赖。整个Android Build系统中的 Make 文件可以分为三类:

    1. Build系统核心 Makefile
      这类makefile定义了整个Build系统的框架,而其他所有Make文件都是在这个框架的基础上编写出来的。位于/build/core目录下。
    2. 针对某个产品的Makefile
      这类makefile是针对某个产品Make文件,这些文件通常位于device/<vendor>/<product>目录下。
    3. 针对某个模块的Makefile Android.mk
      第三类是针对某个模块的makefile文件.AOSP中,不会针对某一个文件进行编译,每一个编译单位都是一个模块,每一个模块由一个名为"Android.mk"的makefile来声明。该文件中定义了如何编译当前模块。

    2.2 make文件中的内容

    LOCAL_PATH := $(call my-dir)表示源代码的目录在哪
    include $(CLEAR_VARS)表示变量全部清空,其中CLEAR_VARS也是一个makefile文件
    LOCAL_MODULE_TAGS := optional表示是哪个TAG,可为eng,user,userdebug,optional等,在哪个版本下执行编译等...

    3. ABS思维导图

    ABS思维导图
    ps:原谅我不会在markdown上画思维导图

    android编译.png

    略丑的流程图

    ps:图不是重点,重点是掌握build系统的流程

    ABS流程.jpg

    附上文字描述:

    1. 入口为Makefile.mk文件
    2. build/core/main.mk:
      1. 检查当前的编译环境inclue build/core/下的核心makefile从而完成编译环境的配置
      2. 检索所有的BoardConfig.mkAndroidProduct.mk载入到编译系统
      3. main.mk里会使用python脚本遍历AOSP下的所有模块(AndroidProduct.mk)并include
    3. 所有模块下的AndroidProduct.mk:
      告诉编译系统,当前module的一些配置信息(源文件,依赖库等)和编译输出类型(可执行文件,共享库,静态库,java库,app等)。根据不同的输出类型,会include不同的makefile(package.mk java_library.mk等),这些makefile会调用相关的编译工具,达到编译目的

    相关文章

      网友评论

        本文标题:AOSP下常用工作目录和ABS编译流程

        本文链接:https://www.haomeiwen.com/subject/kkfloftx.html