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

本文主要是介绍【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脚本版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/687748

相关文章

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

vue监听属性watch的用法及使用场景详解

《vue监听属性watch的用法及使用场景详解》watch是vue中常用的监听器,它主要用于侦听数据的变化,在数据发生变化的时候执行一些操作,:本文主要介绍vue监听属性watch的用法及使用场景... 目录1. 监听属性 watch2. 常规用法3. 监听对象和route变化4. 使用场景附Watch 的

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

python pymodbus模块的具体使用

《pythonpymodbus模块的具体使用》pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值... 目录一、详解1、 基础概念2、核心功能3、安装与设置4、使用示例5、 高级特性6、注意事项二、代码示例

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返