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等多种类型,具体如下图:

9、支持预编译类型

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

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"],

        },

    },

}

最新文章

  1. 串口控RGB三色灯
  2. python学习 流程控制语句
  3. 设置MySQL允许外网访问
  4. Atitit.木马病毒强制强行关闭360 360tray.exe的方法
  5. Orchard Oracle 支持
  6. mysql集群之MYSQL CLUSTER
  7. phalcon:model 事件与事件管理器
  8. oracle学习笔记(一)配置监听
  9. <七>面向对象分析之UML核心元素之包
  10. 一个sql很多个not like的简化语句
  11. String类(C++练习二)
  12. 【转】int && 非常量右值
  13. 创建一个ROS工作空间(ROS Workspace)
  14. windows上安装nodejs,升级npm,安装webpack指南
  15. SpringBoot + Shiro + shiro.ini 的踩坑记录
  16. grovvy生成随机汉字名字
  17. linux 查看nginx如何启动
  18. Confluence 6 启用 OpenSearch
  19. asp.net mvc easyui tree
  20. leetcode981

热门文章

  1. 夜晚 十点 React-Native 源码 暴力畜 系列
  2. ASENET MVC 5 with Bootstrap and Knockout.js 第一弹
  3. Python中关于__main__变量的问题
  4. Dynamics 365 CRM Connected Field Service 不能接收IoT Alert
  5. 【WPF学习】第二十八章 程序集资源
  6. C# LINQ查询表达式用法对应Lambda表达式
  7. Oracle数据库安装与卸载
  8. 手把手写框架入门(一) | 核心拦截器DispatchFilter实现
  9. springmvc html与jsp解析器
  10. 有基因ID或者基因名,如何拿到对应的KEGG通路图?