Android.bp常用语法和预定义属性

介绍

Android.bp是Android构建系统中用于定义模块和构建规则的配置文件,它使用一种简单的声明式语法。以下是Android.bp的一些常见语法规则和约定:

  • 注释:
    单行注释使用//符号。
    多行注释使用//包围。
    和go语言相同

    // 这是单行注释
    /* 这是多行注释 */
    
  • 模块定义:
    每个模块都以module_type字段开始,指定模块的类型,例如cc_library、java_library等。
    模块定义由大括号{}包围,包含模块的属性和规则。

    cc_library {name: "my_lib",srcs: ["file1.cpp", "file2.cpp"],shared_libs: ["lib1", "lib2"],
    }
    
  • 属性和值:
    属性以名称和冒号:组成,后跟相应的值。
    值可以是字符串、整数、布尔值、列表等,具体取决于属性的类型。
    字符串值通常使用双引号括起来,但也可以不括起来,只要字符串中不包含空格等特殊字符。

    name: "my_module",
  • version: 1,

    enabled: true,
    srcs: [“file1.cpp”, “file2.cpp”],

  • 列表属性:
    列表属性使用方括号[]来定义,元素之间用逗号分隔。
    列表属性可以包含字符串、整数、布尔值等。

    srcs: ["file1.cpp", "file2.cpp", "file3.cpp"],
    
  • 变量和函数:
    Android.bp支持一些内置变量和函数,用于获取构建系统的信息或执行特定操作。

    target: {android: {srcs: ["android_src.cpp"],},host: {srcs: ["host_src.cpp"],},
    },
    

这些是Android.bp的一些基本语法规则和约定。Android构建系统使用这些规则来构建Android操作系统,开发者可以根据项目需求自定义Android.bp文件来定义模块和构建规则。有关更详细的语法规则和属性,请参阅Android构建系统的官方文档。

以下是一些常见的预定义属性(以下没有定义模块属性):

  1. name:定义模块的名称,通常是唯一标识符。

    name: "my_module",
    
  2. srcs:指定模块的源文件,可以是一个文件列表。

    srcs: ["file1.cpp", "file2.cpp"],
    
  3. deps:指定模块的依赖关系,即依赖于其他模块的模块列表。

    deps: ["dependency_module1", "dependency_module2"],
    
  4. visibility:指定模块的可见性,确定哪些模块可以访问它。

    visibility: ["//my/module:visible_module"],
    
  5. cflags、cppflags、ldflags:用于指定C/C++编译和链接的标志。

    cflags: ["-Wall", "-O2"],
    cppflags: ["-DDEBUG"],
    ldflags: ["-L/path/to/lib", "-lmylib"],
    
  6. shared_libs、static_libs:指定模块的动态链接库和静态链接库的依赖关系。

    shared_libs: ["lib1", "lib2"],  //编译依赖的动态库lib1和lib2
    static_libs: ["lib3", "lib4"],  //编译依赖的静态库lib3和lib4
    
  7. host_supported、device_supported:指定模块是否支持主机构建和目标设备构建。

    host_supported: true,
    device_supported: true,
    
  8. installable:指定模块是否可以被安装到系统镜像中。

    installable: true,
    
  9. product_specific: 指定编译出来放在/product/目录下(默认是放在/system目录下)

    product_specific: true
    
  10. vendor: 指定编译出来放在/vendor/目录下(默认是放在/system目录下)

    vendor: true,  
    

案例:

//hello.cpp源码
#include <cstdio>
#include <android/log.h>#define LOG_TAG "ezconn"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG ,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG ,__VA_ARGS__)int main() {printf("hello ezconn\n");LOGD("hello ezconn");return 0;
}cc_binary {              //模块类型为可执行文件name: "Hello1",       //模块名Hello1srcs: ["hello.cpp"], //源文件列表vendor: true,        //编译出来放在/vendor/bin目录下(默认是放在/system目录下)shared_libs: [       //编译依赖的动态库"liblog",],
}

案例2

//hello.cpp源码
#include <cstdio>
int main()
{printf("Hello Android\n");return 0;
}cc_binary {name: "Hello2",       //模块名Hello2srcs: ["hello.cpp"],product_specific: true,  //编译出来放在/product/bin目录下(默认是放在/system目录下)cflags: ["-Werror"], //添加编译选项
}

这些是Android.bp文件中一些常见的预制属性。每个属性用于不同的目的,开发者可以根据模块的类型和需求来使用它们。此外,Android构建系统还支持许多其他属性,这些属性可以根据具体的构建任务和模块类型进行自定义。有关更多属性和其详细说明,请参阅Android构建系统的官方文档。

哈德良长城,诺森伯兰郡国家公园

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/112447.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源分布式存储系统(HDFS、Ceph)架构分析

文章目录 中间控制节点架构-HDFSNameNode节点分析DataNode节点分析SecondNameNode节点分析Client分析 完全无中心架构-CephCeph Monitor分析Ceph OSD分析Ceph Manager分析Ceph Clients分析 小结HDFS优点缺点 Ceph优点缺点 参考 中间控制节点架构-HDFS 以HDFS&#xff08; Hado…

无涯教程-JavaScript - RADIANS函数

描述 RADIANS函数将度数转换为弧度。度和弧度之间的转换是通过以下关系式计算的 180度π弧度 其中π是数学常数,PI3.14159265358979 ... 语法 RADIANS (angle)争论 Argument描述Required/OptionalAngleAn angle in degrees that you want to convert.Required 适用性 E…

Linux 信号相关

int kill(pid_t pid, int sig); -功能&#xff1a;给某个进程pid 发送某个信号 参数sig可以使用宏值或者和它对应的编号 参数pid&#xff1a; >0 &#xff1b;将信号发给指定的进程 0&#xff1b;将信号发送给当前的进程组 -1&#xff1b;发送给每一个有权限接受这个信号的…

C数据结构二.练习题

一.求级数和 2.求最大子序列问题:设给定一个整数序列 ai.az..,a,(可能有负数).设计一个穷举算法,求a 的最大值。例如,对于序列 A {1,-1,1,-1,-1,1,1,1,1.1,-1,-1.1,-1,1,-1},子序列 A[5..9](1,1,1,1,1)具有最大值5 3.设有两个正整数 m 和n,编写一个算法 gcd(m,n),求它们的最大公…

Linux static_key原理与应用

文章目录 背景1. static-key的使用方法1.1. static-key定义1.2 初始化1.3 条件判断1.4 修改判断条件 2、示例代码参考链接 背景 内核中有很多判断条件在正常情况下的结果都是固定的&#xff0c;除非极其罕见的场景才会改变&#xff0c;通常单个的这种判断的代价很低可以忽略&a…

ipad录屏在哪?学会这些方法,轻松找到录屏功能

随着科技的不断发展&#xff0c;ipad已经成为人们日常生活中不可或缺的工具之一&#xff0c;它不仅能够帮助我们处理各种任务&#xff0c;还可以用来记录和分享有趣的瞬间。在本篇文章中&#xff0c;我们将详细介绍ipad录屏在哪里&#xff0c;为您提供更多录制和编辑视频的可能…

【LeetCode热题100】--15.三数之和

15.三数之和 注意&#xff1a;最后答案中不能包含重复的三元组 使用排序双指针 可以使用三重循环枚举三元组&#xff0c;但是需要哈希表进行去重操作&#xff0c;得到不包含重复三元组的最终答案&#xff0c;消耗量大量的时间和空间 对于不重复的本质&#xff0c;保持三重循环…

sudo+vim+g++/gcc+makefile+进度条

目录 一、信任表中加入指定的普通用户&#xff08;使其能使用sudo&#xff09; 二、vim的使用 &#xff08;一&#xff09;基本概念 1. 正常/普通/命令模式(Normal mode) 2. 插入模式(Insert mode) 3. 末行模式(last line mode) &#xff08;二&#xff09;vim正常模式…

怎么防止360安全卫士修改默认浏览器?

默认的浏览器 原先选项是360极速浏览器&#xff08;如果有安装的话&#xff09;&#xff0c;我这里改成了Chrome。 先解锁 才能修改。

[SQL Server]在应使用条件的上下文(在 ‘)‘ 附近)中指定了非布尔类型的表达式,查询时间大于某个数值时

这种条件查询条件里面不要有空格&#xff0c;一个也不要有 这种条件查询条件里面不要有空格&#xff0c;一个也不要有 $giftsDb::table(drawgot)->where(disabtime,<,"2030-01-03")->select();

【WFA】【Enhanced open】CT_OWE_DHgroup_STA_NoAssociation-AllGroupsRejected_10338_1

测试报告如下: Fail的关键log: 当连接到ap失败时,驱动程序将尝试连接到ap。如果ap仅支持Group 20,并且sta支持Group 19、20。sta将首先尝试Group 19,ap将通过状态代码77拒绝它。然后驱动程序将尝试连接Group 19的ap,仍然达到最大重试次数。那么sta将尝试第Group 20 。 …

RT-Thread I/O设备模型框架

I/O 设备模型框架 RT-Thread提供了一套简单的I/O设备模型框架&#xff0c;如图所示&#xff0c;它位于硬件和应用程序之间&#xff0c;共分成三层&#xff0c;从上到下分别是I/O设备管理层、设备驱动框架层、设备驱动层。 应用程序通过I/O设备管理接口获得正确的设备驱动&…