当前位置: 首页 > news >正文

【Android-Gradle】多模块开发中,定义额外属性(全局变量),穿梭在不同的Gradle文件中(kotlin脚本版)

其他信息可以参考官网:https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html#org.gradle.api.plugins.ExtraPropertiesExtension

但是本文讲一些简单应用:

需求1:根目录gradle文件定义一个全局变量

build.gradle.kts(根目录)

1.1 添加额外属性:var isRelease by extra(false)// 其中 key = “isRelease” , value = false
1.2 改写属性值:project.setProperty(“isRelease”,true)
1.3 读取属性值:project.properties[“isRelease”] // 或者project.ext.properties[“isRelease”] 都可以

需求2:在子模块的中读写上面那个变量:

2.1 改写属性值:project.setProperty(“isRelease”,true)
2.2 读取属性值:project.properties[“isRelease”] // 注意:project.ext.properties["isRelease"] 只能读取本文件的额外属性,不能读取根目录下的

示例:

1、在安卓根目录创建 build2.gradle.kts 文件
写入:

var isRelease by extra(false)//添加额外的属性

2、在根项目的 build.gradle.kts 文件中:

apply(from = "build2.gradle.kts") // 应用另外一个文件的配置// 然后你也可以再此进行读写:
//project.setProperty("isRelease",true)// 测试——修改其中的属性
//println(project.ext.properties)// 输出全部已经定义的key-value,其中会包含刚刚加入的:isRelease=true
println("isRelease value = "+project.properties["isRelease"])// 输出这个key的 value:true,也是读取额外属性的方法————可以在其他子文件中读取
//println("isRelease?: "+project.ext.properties.containsKey("isRelease"))// 检查是否包含某个key:true

3、上面养好了根项目之后,就可以在子项目中的 build.gradle.kts 读写
注意点就是:project.propertiesproject.ext.properties 读取结果(可以自行打印测试)

参考以上代码即可

项目实战:

注意,使用DSL语法,可能不能使用动态应用插件,具体官网有讲:
https://docs.gradle.org/current/userguide/plugins.html#sec:binary_plugin_locations

假设我们的项目结构为:

root(根目录)-app(主模块)-build.gradle.kts(app)-app-study(其他应用模块,或者库模块)-build.gradle.kts(app-study)-build.gradle.kts(root)-build2.gradle.kts(自己新加的一个统一构建配置文件)

我们需要在最顶层(build.gradle.kts(root))定义一个变量,
来控制模块 app-study 是作为库(library)模块还是应用(application)模块

当插件 id 为:id("com.android.application") 的时候,是作为应用模块构建,此时编译成 apk 归档文件,可直接安装。
当插件 id 为:id("com.android.library") 的时候,是作为应用模块构建,此时编译成 aar 归档文件,作为其他模块的依赖库。

但是所有逻辑都写在 build.gradle.kts(root)文件中有时候可能会比较大,此时如果你想分出一个单独文件写和管理的话,可以新建一个类似的文件,然后再 build.gradle.kts(root)中引用即可。

1、

var isRelease by extra(false)//添加额外的属性

2、

apply(from = "build2.gradle.kts") // 应用另外一个文件的配置
//project.setProperty("isRelease",true)// 测试——修改其中的属性
//println(project.ext.properties)// 输出全部已经定义的key-value,其中会包含刚刚加入的:isRelease=true
//println("isRelease value = "+project.properties["isRelease"])// 输出这个key的 value:true,也是读取额外属性的方法————可以在其他子文件中读取
//println("isRelease?: "+project.ext.properties.containsKey("isRelease"))// 检查是否包含某个key:true// 插件可以扩展 Gradle 的功能,并为项目贡献任务。
// 在构建过程中添加插件称为应用插件,它能提供额外的功能。
plugins {// 应用程序插件有助于创建可执行的 JVM 应用程序。// 应用应用程序插件也会隐式应用 Java 插件。Java 插件为项目添加了 Java 编译、测试和捆绑功能。id("com.android.application") version "8.2.2" apply false  //  	添加插件。id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}

3、

plugins {id("com.android.application")id("org.jetbrains.kotlin.android")
}改成:
val isRelease = project.properties["isRelease"] as Boolean
apply {if (isRelease) {// 如果是发布版本,这个模块应该作为一个库被别人使用plugins.apply("com.android.library")} else {// 如果不是发布版本,这个模块应该作为一个独立的app可以被调试plugins.apply("com.android.application")}plugins.apply("org.jetbrains.kotlin.android")// 这个不论是应用模块,还是库模块,都是用一样的。
}

4、

相关文章:

【Android-Gradle】多模块开发中,定义额外属性(全局变量),穿梭在不同的Gradle文件中(kotlin脚本版)

其他信息可以参考官网:https://docs.gradle.org/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html#org.gradle.api.plugins.ExtraPropertiesExtension 但是本文讲一些简单应用: 需求1:根目录gradle文件定义一个全局变量 …...

React18原理: Fiber架构下的单线程CPU调度策略

概述 React 的 Fiber 架构, 它的整个设计思想就是去参考CPU的调度策略CPU现在都是多核多进程的,重点研究的是 CPU是单核单线程,它是如何调度的?为什么要去研究单线程的CPU? 浏览器中的JS它是单线程的JS 的执行线程和浏览器的渲染GUI 是互斥…...

个人搜集的gstreamer学习链接

gstreamer资源: GStreamer: 官方英文官网 GStreamer C开发教程 (gstreamer安装包下载目录) GStreamer GitLab源码 gstreamer 插件列表) gstreamer官方文档: https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-languagec …...

Blazor Wasm Gitee 码云登录

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…...

Android 自定义BaseActivity

直接上代码: BaseActivity代码: package com.example.custom.activity;import android.annotation.SuppressLint; import android.app.Activity; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Looper; impor…...

基于鲲鹏服务器的LNMP配置

基于鲲鹏服务器的LNMP配置 系统 Centos8 # cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) 卸载已经存在的旧版本的安装包 # rpm -qa | grep php #查看已经安装的PHP旧版本# rpm -qa | grep php | xargs rpm -e #卸载已经安装的旧版,如果提示有…...

MIT-Missing Semester_Topic 6:Version Control (Git) 练习题

文章目录 练习一练习二练习三练习四练习五练习六练习七 练习一 若还没有 Git 的相关经验,阅读 Pro Git 的前几章或诸如 Learn Git Branching 的相关教程,并在学习的同时从 Git 的数据模型(data model)的角度思考各 Git 命令。 老师…...

OpenHarmony轻量级内核-LiteOS-M

OpenHarmony轻量级内核 思维导图 https://download.csdn.net/download/lanlingxueyu/88816723 概述 内核是一人操作系统的运算核心,决定着系统的性能和稳定性。它是基于硬件的第一层软件扩充,提供操作系统的基本功能,是操作系统工作的基础。它负责管理系统的进程、内存、…...

TCP 传输控制协议——详细

目录 1 TCP 1.1 TCP 最主要的特点 1.2 TCP 的连接 TCP 连接,IP 地址,套接字 1.3 可靠传输的工作原理 1.3.1 停止等待协议 (1)无差错情况 (2)出现差错 (3)确认丢失和确认迟到…...

ArcGIS学习(六)地理数据库

ArcGIS学习(六)地理数据库 上个任务我们讲了一个非常重要的知识点一一坐标系。这个任务我们带来另外一个很重要的知识点一一地理数据库。 地理数据库的内容相比于坐标系简单很多! 首先,先让我们来学习下地理数据库的理论。 ArcGIS 中的地理数据库(Geodatabase)是一个用…...

保研机试算法训练个人记录笔记(四)——哈希算法

目录 两数之和 字母异位词分组 最长连续序列 力扣热题100——哈希算法 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答…...

ChatGPT实战100例 - (14) 打造AI编程助手 Code Copilot

文章目录 ChatGPT实战100例 - (14) 打造AI编程助手 Code Copilot一、Code Copilot AI编程助手二、制作代码生成器2.1 定义生成器框架2.2 从现有代码提取代码模板三、进行代码优化ChatGPT实战100例 - (14) 打造AI编程助手 Code Copilot 一、Code Copilot AI编程助手 Code Copi…...

表单标记(html)

前言 发现input的type属性还是有挺多的,这里把一些常用的总结一下。 HTML 输入类型 (w3school.com.cn)https://www.w3school.com.cn/html/html_form_input_types.asp text-文本 文本输入,如果文字太长,超出的部分就不会显示。 定义供文本输入的单行…...

Linux文件和目录管理

目录基础 Linux操作系统以目录的方式来组织和管理系统中的所有文件。所谓的目录,就是将所有文件的说明信息采用树状结构组织起来。每个目录节点之下会有文件和子目录。 所有一切都从 ‘根’ 开始,用 ‘/’ 代表, 并且延伸到子目录。 bin:B…...

【go】gorm\xorm\ent事务处理

文章目录 1 gorm1.1 开启事务1.2 执行操作1.3 提交或回滚 2 xorm2.1 开启事务2.2 执行操作2.3 提交或回滚 3 ent3.1 开启事务3.2 执行操作3.3 提交或回滚 前言:本文介绍golang三种orm框架对数据库事务的操作 1 gorm Begin开启事务 tx *gorm.DB 1.1 开启事务 tx :…...

【数据分享】1929-2023年全球站点的逐月平均风速(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全球气象站…...

IP地址详解

IP地址是互联网协议(Internet Protocol)用于标识并定位网络中主机(如计算机、服务器、路由器等)的一串数字。它是一个32位的二进制数,通常以四个数字(每个数字范围为0-255)的形式显示&#xff0…...

Python爬虫http基本原理#2

Python爬虫逆向系列(更新中):http://t.csdnimg.cn/5gvI3 HTTP 基本原理 在本节中,我们会详细了解 HTTP 的基本原理,了解在浏览器中敲入 URL 到获取网页内容之间发生了什么。了解了这些内容,有助于我们进一…...

Web Services 服务 是不是过时了?创建 Web Services 服务实例

Web Services 是不是过时了? 今天是兔年最后一天,先给大家拜个早年 。 昨天上午视频面试一家公司需要开发Web Services 服务,这个也没有什么,但还需要用 VB.net 开发。这个是多古老的语言了,让我想起来了 10年 前 写 …...

redis单线程还快的原因

1. 内存存储和高效数据结构: 内存存储: Redis将数据存储在内存中,因此可以实现非常高的读写速度,而无需频繁的磁盘I/O操作。 高效数据结构: Redis内置了丰富且高效的数据结构,如字符串、哈希表、列表、集合…...

【Python内存管理终极指南】:20年专家亲授智能体内存优化的5大架构设计图与3个致命误区

第一章:Python智能体内存管理的核心原理与演进脉络 Python的内存管理并非由开发者手动控制,而是由解释器内置的“智能体”协同完成——它融合了引用计数、循环垃圾回收(GC)和内存池机制三重策略,在运行时动态权衡效率与…...

Phi-4-reasoning-vision-15B企业案例:银行客户经理用截图快速生成信贷摘要

Phi-4-reasoning-vision-15B企业案例:银行客户经理用截图快速生成信贷摘要 1. 业务痛点与解决方案 1.1 银行信贷业务的效率瓶颈 在传统银行信贷审批流程中,客户经理需要花费大量时间整理客户资料、录入系统信息、撰写信贷报告。一个典型的信贷审批案例…...

Z-Image i2L模型压缩技术:轻量化部署实践指南

Z-Image i2L模型压缩技术:轻量化部署实践指南 1. 引言 当你兴奋地部署了一个强大的图像生成模型,却发现设备内存告急、推理速度慢如蜗牛,这种体验确实让人沮丧。Z-Image i2L作为一款创新的图像到LoRA模型,虽然功能强大&#xff…...

香橙派OrangePi One到手必做:Linux系统首次启动自动扩容rootfs的保姆级验证指南

香橙派OrangePi One开箱指南:首次启动自动扩容rootfs的完整验证流程 第一次拿到香橙派开发板时,最让人困惑的莫过于如何确认系统是否成功利用了TF卡的全部空间。作为嵌入式Linux新手,我清楚地记得自己第一次启动OrangePi One时的忐忑——那些…...

步进电机复位翻车实录:从堵转到精准归位的5个调试技巧

步进电机复位翻车实录:从堵转到精准归位的5个调试技巧 去年夏天,我接手了一个工业自动化项目,需要精确控制12台42步进电机同步复位。本以为是个常规任务,结果第一周就遭遇了集体"罢工"——有的电机原地抖动不归零&#…...

基于西门子PLC的矿井通风控制系统(含IO表、PLC引脚图、程序) PLC程序设计,价格便宜

基于西门子PLC的矿井通风控制系统(含IO表、PLC引脚图、程序) PLC程序设计,价格便宜,plc触摸屏上位机程序设计,编写。 西门子plc仿真程序设计 提供程序说明, plc程序代写 PLC程序设计、代做 图片为案例 接设…...

大数据在电力行业的应用案例解析 -【电力技术】(一)—— 基于电力大客户运营的大数据落地拓展

目录 一、电力大客户运营场景与大数据价值 二、大数据平台架构(大客户运营专用) 三、落地应用案例一:电力大客户价值分群与精准画像 1. 业务目标 2. 数据宽表(工程常用) 3. 核心算法:K-Means 用户分群(简化示例代码) 4. 应用效果 四、落地应用案例二:大客户负荷…...

网易云音乐评论数据分析:用Python爬取+可视化热门歌曲情感倾向

网易云音乐评论数据挖掘:从爬取到情感分析的完整实战指南 音乐平台的用户评论蕴含着丰富的情感价值和商业洞察。作为国内领先的音乐社区,网易云音乐的海量评论数据对产品经理优化功能、市场人员分析用户偏好具有重要价值。本文将系统性地介绍如何通过Pyt…...

华硕笔记本终极电池拯救指南:用G-Helper实现智能充电与健康修复

华硕笔记本终极电池拯救指南:用G-Helper实现智能充电与健康修复 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models …...

AI编程实战:如何用Cursor和Coze在1小时内完成文生图小程序开发

AI编程实战:如何用Cursor和Coze在1小时内完成文生图小程序开发 当产品灵感突然闪现,如何在最短时间内将它变成可交互的原型?传统开发流程中,从UI设计到API对接至少需要数天时间。而现在,借助AI编程工具链,我…...