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

news2025/2/22 6:27:07

介绍

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",       //模块名Hello1
    srcs: ["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",       //模块名Hello2
    srcs: ["hello.cpp"],
    product_specific: true,  //编译出来放在/product/bin目录下(默认是放在/system目录下)
    cflags: ["-Werror"], //添加编译选项
}

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爆破shadow文件密码脚本(完成版)

在之前的博客Python爆破shadow文件密码脚本&#xff08;简化版&#xff09;中我们做了简化版的爆破shadow文件密码的python脚本&#xff0c;接下来在之前代码的基础上改进&#xff1a; import crypt shadow_line"root:$y$j9T$uEgezfJhn7Ov5naU8bzZt.$9qIqkWYObaXajS5iLDA…

charles报错Not allowed GET http://xx.xx.com/xx - connection dropped

现象&#xff1a;手机抓包时&#xff0c;charles提示Not allowed GET http://xx.xx.com/xx - connection&#xff0c;请求status显示block 排查原因&#xff1a; 1、换手机连接抓包工具&#xff0c;现象也是同上&#xff0c;可以排除手机的原因 2、检索网络上关于报错的解决方…

【HCIE】08.MPLS VPN跨域AB

MPLS VPN跨域A ASBR之间交换IPV4路由&#xff0c;采用IPVR数据包转发数据。该方式易于理解 跨域的要求 两个ASBR之间不能开启LDP&#xff0c;可以开启MPLS 因为两个路由器处于不同的AS之间&#xff0c;之间的IGP是不能互通的&#xff0c;之前是没有路由的 之所以中间不能开…

Java | 网络编程

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;前言&#x1f334;一、网络编程1.概念2.常见软件架构 &#x1f334;二、网络编程三要素1. IP2. 端口号3.协议 &#x1f334;总结 &…

Mybatis学习笔记7 参数处理专题

Mybatis学习笔记6 使用时的一些小技巧_biubiubiu0706的博客-CSDN博客 1.单个简单类型参数 2.Map参数 3.实体类参数 4.多参数 5.Param注解(命名参数) 6.Param源码分析 建表 插入点数据 新建模块 pom.xml <?xml version"1.0" encoding"UTF-8"?&…

STM32 USB CDC 虚拟串口

// 用虚拟串口(USB CDC VCP)感觉有些不稳定&#xff0c;尤其是下位机掉电后再上电&#xff0c;上位机虚拟的那个串口根本不能用&#xff0c;还有就是 // 必须等虚拟串口出来后且知道串口号上位机才可以执行打开操作// 上面是实际情况&#xff0c;但并不是STM32的USB不行&#x…

JUnit5单元测试提示“Not tests were found”错误

JUnit5单元测试提示“Not tests were found”错误&#xff0c;如下图所示&#xff1a; 或者 问题解析&#xff1a; 1&#xff09;使用Test注解时&#xff0c;不能有返回值&#xff1b; 2&#xff09;使用Test注解时&#xff0c;不能使用private关键字&#xff1b; 存在以上情…

C语言——贪吃蛇小游戏

目录 一、ncurse 1.1 为什么需要用ncurse&#xff1a; 1.2 ncurse的输入输出&#xff1a; 1.2.1 如何使用ncurse&#xff1a; 1.2.2 编译ncurse的程序&#xff1a; 1.2.3 测试输入一个按键ncurse的响应速度&#xff1a; 1.3 ncurse上下左右键获取&#xff1a; 1.3.1 如…

移动 Web 第一天

目标&#xff1a;使用位移、缩放、旋转、渐变效果丰富网页元素的呈现方式。 文章目录 01-平面转换简介平移定位居中案例-双开门旋转转换原点案例-时钟多重转换缩放案例-播放特效倾斜 02-渐变线性渐变案例-产品展示径向渐变 03-综合案例导航-频道箭头旋转频道列表 渐变按钮搜索…

什么是AJAX?如何使用原生JavaScript进行AJAX请求?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是AJAX&#xff1f;⭐如何使用原生JavaScript进行AJAX请求&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为…

【ONE·Linux || 进程间通信(一)】

总言 进程间通信&#xff1a;简述进程间通信&#xff0c;介绍通信方式之一&#xff0c;管道通信&#xff08;匿名、名命&#xff09;。 文章目录 总言1、进程间通信简述2、管道2.1、简介2.2、匿名管道2.2.1、匿名管道的原理2.2.2、编码理解&#xff1a;用fork来共享管道2.2.2.…

Rocketmq--消息发送和接收演示

使用Java代码来演示消息的发送和接收 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.2</version> </dependency> 1 发送消息 消息发送步骤: 创建…

三维模型3DTile格式轻量化压缩必要性分析

三维模型3DTile格式轻量化压缩必要性分析 理解3DTile格式轻量化压缩的必要性&#xff0c;首先需要理解三维模型的复杂性和数据量。三维模型通常包含大量的顶点、面片和纹理信息&#xff0c;这使得其数据量非常大&#xff0c;尤其对于大规模的三维地理空间数据&#xff0c;例如城…

Python:为何成为当下最热门的编程语言?

文章目录 &#x1f34b;引言&#x1f34b;1. 简单易学&#x1f34b;2. 多领域应用&#x1f34b;3. 强大的社区支持&#x1f34b;4. 丰富的库和框架&#x1f34b;5. 跨平台兼容&#x1f34b;6. 开源和免费&#x1f34b;7. 数据科学和人工智能的崛起&#x1f34b;8. 自动化和脚本…

YOLOv3深度解析【未完待续】

概况 &#xff08;1&#xff09;YOLOv3是YOLO系列第一次引入残差连接来解决深度网络中的梯度消失问题&#xff08;是不是第一次&#xff0c;有待你后面考证&#xff09;&#xff0c;实际用的backbone是DarkNet53 &#xff08;2&#xff09;最显著的改进&#xff0c;也是对你涨…

【SpringMVC】基于 Spring 的 Web 层MVC 框架

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理SpringMVC : 基于 Spring 的 Web 层MVC 框架 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下…

五种利用ChatGPT帮助大学申请的方法

自去年末以来&#xff0c;ChatGPT和其他生成式人工智能正式进入公众视野&#xff0c;并在超多领域广泛应用。在教育领域&#xff0c;学生使用ChatGPT来写论文成了普遍现象。各教育组织和专家褒贬不一。 一些教授严厉禁止使用人工智能来写作业&#xff0c;认为是学术欺诈。著名…

Windows下SpringBoot连接Redis的正确使用姿势

1. 安装Redis 1.1通过wsl安装redis 参考官方安装文档&#xff0c;需要在wsl2上安装redis服务。 注意我们启动redis的方式&#xff1a; First way&#xff1a;采用官方文档的方式&#xff1a;sudo service redis-server start&#xff0c;关闭wsl后redis在后台仍能运行&…

堆的介绍与堆的实现和调整

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 ​​堆的介绍&#xff1a; 关于堆的实现及相关的其他问题&#xff1a; 堆的初始化&#xff1a; 堆的销毁&#xff1a; 插入建堆&#xff1a; 堆向上调整&#xff1a; 交换两个节点的值&#xff1a; 堆向下调整&a…

STM32单片机——ADC数据采集

STM32单片机——ADC数据采集 ADC相关理论概述CubeMX工程配置HAL库程序设计固件库程序设计 参考博文1&#xff1a;STM32——ADC采集参考博文2&#xff1a;2022年8月12日STM32——ADC采集 ADC相关理论概述 ADC是什么 全称&#xff1a;Analog-to-Digital Converter&#xff0c;指…