gradle脚本中groovy语法讲解

2023-10-27


一、build的生命周期(Glide脚本的生命周期)

初始化期:initialization—>配置期:configuration—>执行期:execution
生命周期


二、gradle命令

执行打包命令,首先找到你所在module的目录,

可以打成APK也可以打成aar,你如果只有一个app就到app下,执行如下命令

(1)gradle clean

(2) gradle assembleDebug

(3)gradle assembleRelease


三、gradle的三种对象

gradle主要有三种对象:

  • Gradle对象:构建初始化时创建,整个构建执行过程中只有这么一个对象,一半很少去修改这个默认配置脚本
  • Settings对象:每个settings.gradle都会转化成1一个Settings对象
  • Project对象:每个build.gralde都会转换成一个Project对象

四、groovy语法

1.字符串拼接

 def str1 = "aaa"
 def str2 = 'bbb'
 println(str1+str2)
 println "$(str1)$(str2)

2.List

def list = [1,2,3,4,5]
println list[0]
//遍历
list.each{
    //每一个元素可以用it表示
    println it
}
for(int i in 1..5){
    println list[i]
}

3.map

def map = ['name':'jack','age':19]
println map['name']
map.each{
    println "key:${it.key},value:${it.value}"
}

4.定义一个方法

def methodA(int a,int b){
    a+b
    //gradle默认将最后一行非空行(有代码行)作为结果返回
}

5.定义一个对象

//groovy没有私有这一说
class Student{
     String name
     int age

     String getName() {
        return name
    }

     void setName(String name) {
        this.name = name
    }

     int getAge() {
        return age
    }

     void setAge(int age) {
        this.age = age
    }
}

6.闭包

//测试闭包
task closure{
    mEach {
        println it
    }
}

//闭包-》钩子或者接口,在gradle只对{}里面有效,Closure
def mEach(closure){
    for(int i in 1..5){
        closure(i)
    }
}

7.环境

//用groovy语法读取配置文件
def getServerUrl(String str){
    def url;
    Properties properties = new Properties()
    def proFile = file('src/main/filters/'+str+"/config.properties")
    if(proFile.canRead()){
        properties.load(new FileInputStream(proFile));
        if(properties!=null){
            url = properties['SERVER2']
        }
    }
    url
}

//签名
    buildTypes {
        //测试环境,一个域名
        debug{
            //                数据类型  变量名  变量值
            buildConfigField 'String','url',getServerUrl("debug")
            //通过buildConfigField放到java中
        }
        //生产环境 ,另一个域名
        release {
            buildConfigField 'String','url',getServerUrl("release")
            //混淆
            minifyEnabled true
            signingConfig signingConfigs.release
            //包的输出  渠道+时间.apk
            android.applicationVariants.all{
                variant ->
                    variant.outputs.all{
                        def fileName = "${getCurrentTime()}_V${defaultConfig.versionName}_release.apk"
                        outputFileName = fileName
                    }
            }
        }
    }

8.打签名包

//签名配置
    signingConfigs{
        release{
            keyAlias 'key0'
            keyPassword '123456'
            storeFile file('demo.jks')
            storePassword '123456'
        }
    }

9.打多个渠道包(友盟)

打不同的渠道包,投放到不同的应用市场

 //多渠道包的code
 flavorDimensions "versionCode"

    //打多个渠道包,友盟,自己统计,
    //1、打不同的渠道包,然后投放到不同的平台或者是应用市场
    //2、在java中取不同的值去统计

    //最原始的多渠道打包
    productFlavors{
        xiaomi{
            buildConfigField 'String','PLATE_FROM',"\"xiaomi\""
        }
        qh360{
            buildConfigField 'String','PLATE_FROM',"\"qh360\""
        }
        /*

         */
        baidu{
            buildConfigField 'String','PLATE_FROM',"\"baidu\""
        }
    }

    //一键化多渠道打包

    productFlavors{
        xiaomi{}
        qh360{}
        baidu{}
    }

    productFlavors.all {
        flavor ->
            buildConfigField "String","PLATE_FROM","\"${name}\""
    }
}

 def getCurrentTime(){
    //java中生成当前时间 2021-08-16_21_59_59
    return new Date().format("yyyy-MM-dd",TimeZone.getTimeZone("UTC"))
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gradle脚本中groovy语法讲解 的相关文章

  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • Java - JPanel 内有边距和 JTextArea

    我想创建这样的东西 主面板有其边距 x 并且 TextArea 位于该面板的中心 几乎填满了面板 底部是另一个具有自定义尺寸 高度 y 的面板 可以使用某些快捷方式将其切换为可见和不可见 底部面板有 FlowLayout 和几个元素 问题是
  • 将现有 eclipse 项目导出到 war 文件时出现“模块名称无效”

    我正在尝试将现有 Eclipse 项目导出到 war 文件 但无论我在 WAR Export 对话框页面中输入什么 系统总是返回 模块名称无效 我不知道如何解决这个问题 谢谢您的帮助 我有同样的问题 我修复了它 请按照以下步骤操作 您可以创
  • 数据未刷新“DynamiteModule:未找到 com.google.firebase.auth 的本地模块描述符类”

    我已经使用 Firebase 很长时间了 到目前为止 除了以下场景之外 一切都很好 有时我注意到我的应用程序不再获取新数据 我正在用一个活跃的监听器监听变化 并且我确实有keepSynced set to true 发生这种情况时 我会在日
  • 从 HttpClient 3 转换为 4

    我已经成功地对所有内容进行了更改 但以下内容除外 HttpClient client HttpPost method client new DefaultHttpClient method new HttpPost url InputStr
  • 如何使用共享首选项在两个 Android 应用程序之间共享数据?

    我有两个应用程序 App1 和 App2 我想使用共享首选项在 App1 中保存数据并在 App2 中访问 反之亦然 我可以在 App1 中保存数据并在 App2 中访问数据 但反之则不行 这就是我现在正在做的 在清单中 android s
  • 运行 Android 应用程序时出现错误

    我已经使用 Eclipse 创建了一个 Android 应用程序 但应用程序未在 AVD 上运行 它显示 不幸的是已停止工作 日志猫消息如下 07 29 04 59 50 789 W dalvikvm 784 threadid 1 thre
  • 如何为 flutter 绘图应用实现橡皮擦功能

    有一个关于通过 flutter 创建绘图应用程序的视频 YouTube https www youtube com watch v yyHhloFMNNA 它支持当用户点击屏幕时绘制线 点 但我找不到像 Android 本机那样擦除用户绘制
  • 配置jmxremote时无法正常停止tomcat

    我添加了一个jmxremotecatalina bat中的配置 set JAVA OPTS Dcom sun management jmxremote port 9004 Dcom sun management jmxremote ssl
  • 推特更新状态

    我正在通过 twitter4j 将 Twitter 集成到 Android 我可以成功阅读我发布的推文 现在我试图用它发布推文 但我不能 我收到如下奇怪的警告 02 01 16 28 43 298 WARN System err 729 4
  • 可用屏幕的尺寸

    我使用的是 Nexus 7 1280x800 android 4 2 2 API 17 我想获取屏幕的大小 将其划分为相同高度和宽度的正方形部分 我正在使用 FrameLayout 我的方块是 ImageView 的子类 我这样做 cont
  • 在循环中按名称访问变量

    我正在开发一个 Android 项目 并且有很多可绘制对象 这些绘图的名称都类似于icon 0 png icon 1 png icon 100 png 我想将这些可绘制对象的所有资源 ID 添加到整数 ArrayList 中 对于那些不了解
  • Android项目中使用java获取电脑的IP地址

    我在用ksoap2 android http code google com p ksoap2 android 我需要使用java获取IP地址 这样我就不必每次都手动输入它 我所说的 IP 地址是指 例如 如果我这样做ipconfig使用命
  • Java:一个函数有多种返回类型...可以使用泛型吗?

    为了简单起见 我有一些程序 如下所示 public String fetchValueAsString String key public DateTime fetchValueAsDateTime String key 我想要类似的东西
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • 如何检测日期选择器对话框的取消单击?

    我正在使用以下 日期选择器的示例 http developer android com guide tutorials views hello datepicker html http developer android com guide
  • Android - 如何简单地拖放按钮?

    我在这里找到了一个适合初学者的教程 http androidrox wordpress com 2011 05 13 android sample app drag and drop image using touch http andro
  • Java 中的微分方程

    我正在尝试用java创建一个简单的SIR流行病模型模拟程序 基本上 SIR 由三个微分方程组定义 S t l t S t I t l t S t g t I t R t g t I t S 易感人群 I 感染人群 R 康复人群 l t c
  • 为什么我不能将 Collection 转换为 Collection>

    问题的关键是 为什么这会导致编译时错误 List
  • Android 版本低于 Lollipop 时出现 java.lang.NoClassDefFoundError

    我有一台运行 Android 21 的 Nexus 5 设备 我正在测试我的项目 没有任何问题 但是 如果我使用 Google API 19 在模拟器上进行测试 则会显示错误java lang NoClassDefFoundError 如果

随机推荐

  • 把一个项目打成jar包并引入其他项目中

    目录 一 前言 二 常见的打包 maven 依赖 2 1打包插件 2 2开发工具打包到本地仓库 三 如何引入jar包 3 1根据jar所在路径来引入 3 2引入jar 一 前言 在日常开发中我们需要将我们的项目打成jar包并引入到其他项目中
  • ORA-12519: TNS:no appropriate service handler found 解决方法

    背景 今天客户在使用导入Excel功能时 由于底层的数据库连接层框架是自己公司研发的 导致出现问题 在进行事物时产生了最大连接数错误 为了让客户能先用着 通过修改数据库最大连接数 来先应付一下 下次版本迭代 修复这个问题 解决方案 1 使用
  • linux(Ubuntu) 安装MySql服务,并配置VScode使用C++连接mysql数据库

    1 安装MySql服务 sudo apt get install mysql server sudo apt get install mysql client sudo apt get install libmysqlclient dev
  • 数据可视化第三章

    第三章 什么是时间型数据呢 时间型数据类型是 按时间顺序排列的一系列数据值 与一般的定量数据不同 时间型数据包含时间属性 不仅要表达数据随时间变化的规律 还需表达数据分布的时间规律 时间数据可以分为连续型时间数据和离散型时间数据两种 时间数
  • 浅谈MySQL:结构、存储引擎、索引、优化

    MySQL 体系结构 1 模块 1 Connector 用来支持各种语言和 SQL 的交互 比如 PHP Python Java 的JDBC 2 Management Serveices Utilities 系统管理和控制工具 包括备份恢复
  • nginx负载均衡下上传webshell

    目录 反向代理 负载均衡 实验环境 在节点中上传webshell 执行命令的问题 上传工具的问题 由于目标机器不能出外网 想进一步深入 只能使用 reGeorg HTTPAbs 等 HTTP Tunnel 可在这个场景下 这些 tunnel
  • leetcode--31. Next Permutation

    Implement next permutation which rearranges numbers into the lexicographically next greater permutation of numbers If su
  • C++知识积累:继承关系(含虚函数)下类的内存布局

    目录 1 无继承 2 一般继承 2 1 单继承 2 2 多层继承 2 3 多重继承 2 4 菱形继承 3 虚继承 3 1 虚继承的布局 3 2 虚继承的多层继承 3 3 虚继承的菱形继承 总结 1 无继承 类A定义如下 class A pr
  • 编写一个最简单的Windows服务端和客户端程序

    2023年8月4日 周五上午 编译器 我使用vs2022作为编译器 纯享版 服务端负责发送Hello给客户端 客户端负责把Hello接收并打印出来 服务端代码 include
  • 如何将 JSON 转换为有序判断?

    JSON JavaScript Object Notation 是系统之间数据交换的流行格式 它是一种轻量级 基于文本且易于解析的格式 已成为互联网上数据交换的标准 但是 JSON 不会为数据结构中的元素提供任何顺序 虽然这在大多数情况下可
  • linux进入中文乱码的目录下分析文件

    1 查看目录或文件对应的节点 使用命令ls li或ls i 2 进入目录下 使用命令 cd find inum 205129285 参考链接 https www cnblogs com ph829 p 4037929 html
  • Mobile phones 【POJ - 1195】【二维线段树】

    题目链接 关于这道题 我用了二维线段树来做的 但是 我这里又一个疑问 就是我用了个四叉树的线段树的代码却是始终过不了一直在WA 若恰好有大佬经过 能帮小生看一下我不成器的代码吗 先放上讨论哪里错的代码供大家讨论 帮我修改 谢谢 includ
  • 数据库系统原理三

    关系数据模型 1 超码或超键 SuperKey 在码中去除某个属性 它仍然是这个关系的码 关系的所有属性的集合 也是这个关系的最大超码或超键 2 候选码或候选键 CandidateKey 在码中不能从中移去任何一个属性 否则它就不再是这个关
  • windows和Linux动态连接器搜索库文件(.dll/.so)目录的顺序

    Windows按下列顺序搜索 DLL 可执行模块所在的目录 GetMoudleFileName Windows 系统目录 GetSystemDirectory 函数检索此目录的路径 Windows 目录 GetWindowsDirector
  • QT中信号与槽函数

    1 connect的四个参数分别为 参数的发送者 发送者要发送的信号 信号的接收者 接收者对应的槽函数 connect ui btnPage1 SIGNAL clicked this SLOT OnPage1 2 自定义信号 1 返回值为v
  • 2022-2027年中国北京养老机构行业市场深度分析及投资战略规划报告

    报告类型 产业研究 报告格式 电子 纸介版 出品单位 华经产业研究院 本报告由华经产业研究院重磅推出 对中国北京养老机构行业的发展现状 竞争格局及市场供需形势进行了具体分析 并从行业的政策环境 经济环境 社会环境及技术环境等方面分析行业面临
  • 真吓人 chatGPT-4 几分钟搞定我3天工作量

    大家好 我是北妈 一 前些天只是在凑热闹 调戏chat和他对话 问他一些问题 看看它到底是不是弱智 但自从发布了GPT 4 0智能 直接全起飞了 我花20美金 月 买入PLUS 账号 主要是申请开发者权限 用来开发自己的插件或者系统 北妈建
  • try{变量}catch{}中变量无法引用到外部

    try内部定义的对象无法到外部使用 需要在try前声明定义该变量并为null people p2 null 需要添加该代码 try p2 people p1 clone System out println p1 System out pr
  • WebView无法调起支付宝,显示alipays://platformapi/startApp ERR_UNKNOWN_URL_SCHEME

    参考 https www jianshu com p 167457b65f78 一 问题 安卓app通过webview调用支付宝 显示错误信息 alipays platformapi startApp ERR UNKNOWN URL SCH
  • gradle脚本中groovy语法讲解

    文章目录 一 build的生命周期 Glide脚本的生命周期 二 gradle命令 三 gradle的三种对象 四 groovy语法 1 字符串拼接 2 List 3 map 4 定义一个方法 5 定义一个对象 6 闭包 7 环境 8 打签