• Android.bp学习笔记


    1.Android.bp简介

    Android 7.0之后希望用Android.bp替换Android.mk,bp简单的配置更方便Ninja 文件的产生,而Blueprint和Soong 就此产生。Android 利用Blueprint和Soong 来解析bp文件,经过最终转换为ninja files。 Blueprint和Soong都是由Golang写的项目。 从Android Nougat开始,prebuilts/go/ 目录下新增了Golang所需的运行环境,在编译时使用。Android.bp以及相关支持,从Android Nougat开始加入,从 Android Oreo(8.0)开始默认开启。 如果需要在Android Nougat的版本使用,需要在执行编译时添加变量: make 'USE_SOONG=true' Soong是以前Android基于make的编译系统的替代品。它以Android.bp文件替代Android.mk,Android.bp文件用类似JSON的简洁声明来描述需要构建的模块。

    2.例子1

    cc_binary {             //编译成可执行文件,cc_library_shared编译成动态库
        name: "bt_test",    //编译出的可执行文件的名字为bt_test
        vendor: true,       //编译出来放在/vendor目录下(默认是放在/system目录下)
        srcs: ["bt_test.cpp"], //源文件,格式["a.cpp", "b.cpp"]
        cflags: [
            "-Wall",
            "-Werror",
            "-Wno-unused-parameter",
        ],                    //编译flag
        include_dirs: [
            "hardware/interfaces/halnode/1.0/default",    //用户值定的头文件查找路径
        ],
        shared_libs: [       //编译依赖的动态库
            "liblog",
            "libutils",
            "libhidltransport",
            "android.hardware.halnode@1.0",
            "libhidlbase",
            "libbase",
        ],
    }

    2.其它可用选项

    subdirs = ["ndk"]   //指定进入下层ndk目录进行编译

    export_include_dirs: [   //从其他模块添加头文件检索路径  "include",  "include/camera" ],

    export_shared_lib_headers: ["libcamera_metadata"],

    local_include_dirs: ["aidl"],   //如果从当前目录添加路径时使用,将./aidl目录加入头文件的搜索路径

    static_libs: ["libupdater"],   //指定对库libupdater进行静态链接   static_executable: true,

    4.官方最全解释

    Android.bp Build Docs (android-8.0.0-r9):http://note.qidong.name/demo/soong_build/

    5.变量

    Android.bp文件可包含顶级变量赋值:

    test_srcs = ["src/test.c"],
    cc_binary {
        name: "test",
        srcs: test_srcs,
    }

    变量范围限定为声明它们的文件的其余部分,以及任何子蓝图文件。变量是不可变的,但有一个例外 —— 它们可以附上+= 赋值,但仅在变量被引用之前。

    6.注释

    注释方式,与Golang类似。 支持行注释//与块注释/* block */。

    7.操作符

    除了赋值的 = 以外,只有 + 。

    8.默认模块

    默认模块可用于在多个模块中重复相同的属性。

    cc_defaults {
        name: "test_defaults",
        shared_libs: ["libz"],
        stl: "none",
    }
    cc_binary {
        name: "test1",
        defaults: ["test_defaults"],
        srcs: ["src/test/test1.c"],
    }

    9.常用工具

    (1)bpfmt 一个是格式化工具bpfmt。 与gofmt类似,可以格式化Blueprint文件。 (其实,代码基本上都是从gofmt复制而来。)eg 格式化当前目录及其递归子目录下的所有Android.bp: # bpfmt -w .

    (2)androidmk 另一个是androidmk,负责转换Android.mk为Android.bp, eg: # androidmk Android.mk > Android.bp

    10.工具链关系

    Android.mk、Android.bp、Soong、Blueprint、Ninja 简单的方式表达这几个概念之间的作用关系

    Android.bp --> Blueprint --> Soong --> Ninja

    Makefile or Android.mk --> kati --> Ninja   Android.mk --> Soong --> Blueprint --> Android.bp

    11.针对不同系统进行编译

    system/core/libusbhost$ cat Android.bp 
    
    cc_library {
        name: "libusbhost",
        vendor_available: true,
        vndk: {
            enabled: true,
        },
        host_supported: true,
        srcs: ["usbhost.c"],
        cflags: ["-Werror"],
        export_include_dirs: ["include"],
        target: {
            android: {    //编译Android上运行的程序
                cflags: [
                    "-g",
                    "-DUSE_LIBLOG",
                ],
                shared_libs: ["liblog"],
            },
            darwin: {    //编译darwin上运行的程序
                enabled: false,
            },
        },
    }
  • 相关阅读:
    updatePanel、自定义控件、弹出提示
    防止csv和excel转义
    随机码的生成
    一个页面多个Form——ajaxform
    Google首页电吉
    Sivlerlight3 向silverlight传递自定义参数
    Java接口测试get请求,使用httpClient获取cookies+携带获取的cookies访问get接口
    Java接口测试post请求,使用httpClient获取cookies+携带获取的cookies访问post接口
    Acess定义过多字段
    无依赖Office资源的导入导出
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10595618.html
Copyright © 2020-2023  润新知