• Android.bp文件简介


    Android.bp是用来替换Android.mk的配置文件,它使用Blueprint框架来解析。Blueprint是生成、解析Android.bp的工具,是Soong的一部分。Soong则是专为Android编译而设计的工具,Blueprint只是解析文件的形式,而Soong则解释内容的含义,最终转换成Ninja文件。

    1、模块

    定义一个模块从模块的类型开始,模块有不同的类型,如下例子中的“cc_binary”,模块包含一些属性格式为“property-name:

    property-value”,其中name属性必须指定,其属性值必须是全局唯一的。

    cc_binary{
    
        name: "gzip",
    
        srcs: ["src/test/minigzip.c"],
    
        shared_libs: ["libz"],
    
        stl: "none",
    
    }
    

    默认模块“cc_defaults”的用法如下。

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

    2、变量

    变量赋值可以通过“=”号赋值。

    gzip_srcs = ["src/test/minigzip.c"],
    
    
    
    cc_binary {
    
      name: "gzip",
    
        srcs: gzip_srcs,
    
      shared_libs: ["libz"],
    
      stl: "none",
    
    }
    
    

    3、注释

    注释包括单行注释//和多行注释/* */。
    

    4、类型

    具体支持以下几种类型:

    Bool(`true` or `false`)
    
    Integers(`int`)
    
    Strings(`"string"`)
    
    Listsof strings (`["string1", "string2"]`)
    
    Maps(`{key1: "value1", key2: ["value2"]}`)
    

    5、操作符

    String类型、字符串列表类型和Map类型支持操作符“+”。

    6、格式控制工具

    bpfmt是一个bp文件的格式控制工具,包括4个空格的缩进、列表有多个元素时每个元素一行、列表和map的最后一个元素多一个冗余的逗号等等。工具目录为:build/blueprint/bpfmt/

    在当前目录下执行以下命令:

    7、Android.mk转为Android.bp

    androidmk工具可以把mk文件转换为bp文件,但一些复杂的用法和自定义的规则需要手动转换。工具目录为:build/soong/androidmk/

    androidmkAndroid.mk>Android.bp
    

    8、支持的模块类型

    Android.bp可以支持android_app、cc_binary、cc_binary_host等多种类型,具体如下图:

    image

    9、支持预编译类型

    Android.bp可以支持5种预编译类型,如下图所示:

    image

    10、模块名称解析

    soong提供了可以在不同目录中配置相同的模块名称,只要每个模块的名称在不同的命令空间中声明。

    soong_namespace{
    
        imports: ["path/to/otherNamespace1","path/to/otherNamespace2"],
    
    }
    

    11、条件式编译

    cc_library{
    
        ...
    
        srcs: ["generic.cpp"],
    
        arch: {
    
            arm: {
    
                srcs: ["arm.cpp"],
    
            },
    
            x86: {
    
                srcs: ["x86.cpp"],
    
            },
    
        },
    
    }
    
    
  • 相关阅读:
    Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.
    Jsonpath的基本使用
    [转]什么是CNN、RNN、LSTM
    [转]爬虫 selenium + phantomjs / chrome
    [转]js async await 终极异步解决方案
    [转]如何让多个不同类型的后端网站用一个nginx进行反向代理实际场景分析
    [转]java常用正则表达式
    [转]关于SSH与SSM的组成及其区别
    用live2d给自己的博客园加个小卡通,可以固定model也可以随机设置
    [转]关于/r与/n 以及 /r/n 的区别总结
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/12361659.html
Copyright © 2020-2023  润新知