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构建系统的官方文档。
以下是一些常见的预定义属性(以下没有定义模块属性):
-
name:定义模块的名称,通常是唯一标识符。
name: "my_module", -
srcs:指定模块的源文件,可以是一个文件列表。
srcs: ["file1.cpp", "file2.cpp"], -
deps:指定模块的依赖关系,即依赖于其他模块的模块列表。
deps: ["dependency_module1", "dependency_module2"], -
visibility:指定模块的可见性,确定哪些模块可以访问它。
visibility: ["//my/module:visible_module"], -
cflags、cppflags、ldflags:用于指定C/C++编译和链接的标志。
cflags: ["-Wall", "-O2"], cppflags: ["-DDEBUG"], ldflags: ["-L/path/to/lib", "-lmylib"], -
shared_libs、static_libs:指定模块的动态链接库和静态链接库的依赖关系。
shared_libs: ["lib1", "lib2"], //编译依赖的动态库lib1和lib2 static_libs: ["lib3", "lib4"], //编译依赖的静态库lib3和lib4 -
host_supported、device_supported:指定模块是否支持主机构建和目标设备构建。
host_supported: true, device_supported: true, -
installable:指定模块是否可以被安装到系统镜像中。
installable: true, -
product_specific: 指定编译出来放在/product/目录下(默认是放在/system目录下)
product_specific: true -
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构建系统的官方文档。

相关文章:
Android.bp常用语法和预定义属性
介绍 Android.bp是Android构建系统中用于定义模块和构建规则的配置文件,它使用一种简单的声明式语法。以下是Android.bp的一些常见语法规则和约定: 注释: 单行注释使用//符号。 多行注释使用/和/包围。 和go语言相同 // 这是单行注释 /* 这是…...
close和fclose
在Linux系统中,close函数并不会主动调用fsync接口。close函数只是关闭了文件描述符,而不保证数据被写入到磁盘。如果你想确保数据被写入到磁盘,你需要在close函数之前调用fsync函数。这是因为Linux使用了缓存机制来提高磁盘的读写性能&#x…...
在已知的二维坐标里找到最接近的点
一、业务场景 最近在研发的项目,在做可视化层,在全球地图上,对我们的国家的陆地地图经纬度按照步长为1的间隔做了二维处理。在得到一组整数的点位信息后,需要将我们已有的数据库数据(业务项目)按照地址的经纬度,映射到…...
spring boot 八、 sharding-jdbc 分库分表 按月分表
在项目resources目录下新建com.jianmu.config.sharding.DateShardingAlgorithm 文件 新增yaml配置 数据源 spring:shardingsphere:props:sql:#是否在日志中打印 SQLshow: true#打印简单风格的 SQLsimple: truedatasource:names: pingxuanlogpingxuanlog:type: com.alibaba.dru…...
Java 8 中Stream流的一些用法
public class Djmxlist {private String dxmc;private Integer sl;public String getDxmc() {return dxmc;}public void setDxmc(String dxmc) {this.dxmc dxmc;}public Integer getSl() {return sl;}public void setSl(Integer sl) {this.sl sl;} }插入一下数据 List<Djm…...
Elasticsearch 8.10 中引入查询规则 - query rules
作者:Kathleen DeRusso 我们很高兴宣布 Elasticsearch 8.10 中的查询规则! 查询规则(query rules)允许你根据正在搜索的查询词或根据作为搜索查询的一部分提供的上下文信息来更改查询。 什么是查询规则? 查询规则&…...
Windows PostgreSql 创建多个数据库目录
1 使用默认用户Administrator 1.1初始化数据库目录 E:\Program Files\PostgreSQL\13> .\bin\initdb -D G:\DATA\pgsql\data3 -W -A md5 1.2连接数据库 这时User为Administrator,密码就是你刚才设置的,我设置的为123456,方便测试。 2 添加…...
Java AOP Framework概述
Java AOP Framework概述 1. AspectJ1.1 使用AspectJ进行切面编程 2. Spring AOP2.1 使用Spring AOP进行切面编程2.2 如何决定使用哪种动态代理2.3 如何通过配置指定代理方式2.4 Spring AOP和AspectJ的关系 3. Spring Boot AOP4. 扩展4.1 AspectJ织入方式详解 参考 Java常用的AO…...
220V转12V芯片-交流45v-265v输入,固定12v输出峰值电流600MA
标题:220V转12V芯片,实现宽电压输入和固定12V输出 摘要:本文介绍了一款具备宽电压输入范围(45V-265V)和固定12V输出的220V转12V芯片。该芯片内置了650V高压MOS管,并通过CS电阻调节输出电流,最大…...
TOGAF架构开发方法—初步阶段
本章描述了满足新企业体系结构业务指令所需的准备和启动活动,包括组织特定体系结构框架的定义和原则的定义。 一、目标 初步阶段的目标是: 确定组织所需的体系结构功能: 审查进行企业架构的组织背景确定受体系结构功能影响的企业组织的元素并确定其范围确定与架构功能相交的…...
软件定制APP开发步骤分析|小程序
软件定制APP开发步骤分析|小程序 软件定制开发步骤: 1.需求分析: 这是软件定制开发的第一步,也是最关键的一步。在这个阶段,软件开发团队需要与客户进行沟通,了解客户的具体需求和期望。通过讨论和交流,确…...
postman接口传参案例
目录 案例1: 接口A 接口B 案例2: //断言 案例1: 接口A 根据返回值需要从返回值中提取userid值,在Tests标签栏下编写脚本 //获取返回的响应值,并转化为json格式 var jsonData pm.response.json(); // 获取返回…...
【2023华为杯A题】WLAN网络信道接入机制建模(代码、思路.....)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
CFCA企业版通配符SSL证书
CFCA是中国CFCA企业版通配符SSL证书金融认证中心的缩写,即China Financial Certification Authority。它是一家经过中国人民银行和国家信息安全机构批准成立的国家级权威安全认证机构,也是国际CA浏览器联盟组织(CA/Browser Forum)…...
基于ASCON的AEAD
1. 引言 前序博客: ASCON:以“慢而稳”赢得NIST轻量级加密算法标准密码学中的AEAD(authenticated encryption with associated data) 对称密钥加密过去数年来已发生改变,具体为: 当今主要使用stream ciphers,因其比…...
汇编宏伪指令介绍
1、汇编宏伪指令介绍 .macro macname macargs .endm(1)“.macro"和”.endm"表示宏定义的开始和结束; (2) “.macro"后面接着宏定义的名字,然后是参数,参数后面的宏定义的实现…...
优化系统报错提示信息,提高人机交互(一)
1、常规报错及处理 package com.example.demo.controller;import com.example.demo.service.IDemoService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.w…...
FPGA纯verilog实现8路视频拼接显示,提供工程源码和技术支持
目录 1、前言版本更新说明免责声明 2、我已有的FPGA视频拼接叠加融合方案3、设计思路框架视频源选择OV5640摄像头配置及采集静态彩条视频拼接算法图像缓存视频输出 4、vivado工程详解5、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 6、上板调试验证并演示…...
spring boot项目一次性能测试的总结
满足标准:并发大于等于100 ,平均响应时间小于等于3秒 项目在压测过程中并发数只有50,在并发数100的情况下有很多请求链接是失败的 我们该如何入手去处理这些问题并提高并发数呢? 1、首先从压测结果入手,对不满足标准…...
10分钟设置免费海外远程桌面
前言 本教程将向您介绍如何使用 Amazon Lightsail 服务的免费套餐轻松搭建属于您的远程桌面。依托于 Amazon 全球可用区,您可以在世界各地搭建符合您配置需求的远程桌面。 本教程需要先拥有亚马逊云科技海外账户。现在注册亚马逊云科技账户可以享受12个月免费套餐…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
