当前位置: 首页 > 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、

相关文章:

  • 使用二分查找优化时间复杂度
  • Transformer的PyTorch实现之若干问题探讨(一)
  • ubuntu下如何查看显卡及显卡驱动
  • php 如何判断是否上传了文件、图片
  • CGAL::2D Arrangements-5
  • Chrome 沙箱逃逸 -- Plaid CTF 2020 mojo
  • APIfox自动化编排场景(二)
  • Codeforces Round 923 (Div. 3) C. Choose the Different Ones(Java)
  • 【MATLAB】GA_BP神经网络回归预测算法
  • 基于51 单片机的交通灯系统 源码+仿真+ppt
  • LoRA:语言模型微调的计算资源优化策略
  • 树莓派4B(Raspberry Pi 4B)使用docker搭建springBoot/springCloud服务
  • Java玩转《啊哈算法》纸牌游戏之小猫钓鱼
  • CSP-动态规划-最长公共子序列(LCS)
  • HiveSQL——条件判断语句嵌套windows子句的应用
  • C# CAD交互界面-自定义面板集(四)
  • vue3学习——集成sass
  • vscode +markdown 的安装和使用
  • 【后端高频面试题--Linux篇】
  • 【ES】--Elasticsearch的分词器详解
  • 刘国中:毫不松懈巩固拓展脱贫攻坚成果,全力以赴抓好农业防灾减灾工作
  • 黄宾虹诞辰160周年|一次宾翁精品的大集结
  • 辽宁省委书记郝鹏、省长王新伟赶到辽阳火灾事故现场指导善后处置工作
  • 民生银行一季度净利127.42亿降逾5%,营收增7.41%
  • 北大深圳研究生院成立科学智能学院:培养交叉复合型人才
  • 烟花、美食和购物优惠都安排上了,上海多区开启热闹模式