Gradle 入门说难也不难,说简单吧也不简单~

news/2024/5/20 23:54:04/文章来源:https://blog.csdn.net/weixin_61845324/article/details/127435798

在学习过程中最痛苦的事,并不是认为自己坚持不下去学不会,而是对某块知识点的碎片信息学习了很多,仍然无法窥其门径,处于懵懂状态。

就拿Gradle来说,我之前就是这种状态,不管怎么去查阅文档和视频,一直有些知识点搞不懂,但是自己起手完成过一个需求后,才发现Gradle 也不是那么难学懂嘛,虽然中间也踩了不少的坑。

中间遇到的问题有:

  • 如何创建 private、public 两个 build variants(构建变体)?
  • 如何配置 public 版本在 private 版本之前构建(因为 private 版本依赖 public 版本生成的 apk)?
  • public 版本构建完成后,如何自动复制其生成的 apk 到 private 版本的 assets 目录下?

解决方案:

  • 关于构建变体,其实就是一次编译,输出多个版本的 apk,具体内容请参考官方文档中文版《配置构建变体》
  • 两个构建变体,说明对应两个 assemble task,那么只要获获取到这两个 task 对象,然后设置其依赖关系即可
  • Gradle 文件支持 groovy 编写,groovy 又是基于 java 的,所以即使不熟悉 groovy 的语法,也可以用 java 写出来。不过对于复制这种操作,Gradle 有现成的 API

编写流程

方案很清晰:assemblePublicApp -> deleteOldPublicApp -> signNewPublicApp -> copyNewPublicApp -> assemblePrivateApp

但是代码怎么写呢?我一时间感到无从下手。比如如何获取两个构建变体对应的 assemble task?如何创建一个 copy task?又如何在执行 copy task 之前先执行 delete task(删除 assets 目录下的旧 apk) 以及 sign task(签名 public apk)?

我一顿 google 搜索之后解决了这些问题,不过也踩了一个坑,就是自定义 task 内的代码执行时机不对。比如 deleteOldPublicApk task 中的日志,总是在执行 gradle assemble 命令之后立即输出,而不是在 assemblePublicApp task 之后输出:

File -> Demo/app/build.gradle

android {...
}task deleteOldPublicApk(type: Delete) {println("-----------> delete the old pubic apk begin") // 注意:这么写代码会在配置阶段立即执行delete 'src/privateApp/assets/Public.apk' // delete 方法继承自 Delete task,所以是一个 Action,在执行阶段才会被执行println("-----------> delete the old pubic apk end") // 注意:这么写代码会在配置阶段立即执行
}task signNewPublicApp() {doFirst {println 'sign the new public app' // 写在 doFirst 或者 doLast 中,才会在执行阶段被执行,具体见下文}
}task copyNewPublicApp() {doLast {println 'copy the new public app'}
}afterEvaluate {def assemblePublic = tasks.getByName('assemblePublicAppRelease')deleteOldPublicApk.dependsOn(assemblePublic)copyNewPublicApp.dependsOn(deleteOldPublicApk, signNewPublicApp)def assemblePrivate = tasks.getByName('assemblePrivateApp')assemblePrivate.dependsOn(copyNewPublicApp)
}dependencies {...
}

如上所示的 deleteOldPublicApk task,只要在 terminal 中 输入 gradlew assemble 必然会首先打印:

-----------> delete the old pubic apk begin
-----------> delete the old pubic apk end

相信很多不熟悉 Gradle 的人都会犯这样的错误,stackoverflow 上有人也发出了同样的疑问 Why is my Gradle task always running?

后来我阅读了 Gradle 的官方文档 《Build Lifecycle》,恍然大悟,应该这么写:

task deleteOldPublicApk(type: Delete) {doFirst {println("-----------> delete the old pubic apk begin")}delete 'src/privateApp/assets/Public.apk'doLast {println("-----------> delete the old pubic apk old")}
}

于是在我自己弄得以后,整理了一个《Gradle 入门到精通》学习笔记,根据自己学习中所做的一些笔录来整的,主要也是方便后续好复习翻阅,省掉在去网上查找的时间,以免在度踩坑,如果大家有需要的可以直接通过点击此处↓↓↓进行参考学习!!!

有需要的可以复制下方链接,传送直达!!!
https://qr21.cn/CaZQLo?BIZ=ECOMMERCE

Gradle基础

深度探索 Gradle 自动化构建技术

深入理解Gradle框架

Android Gradle Plugin 源码解析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_404071.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联邦学习(Federated Learning):技术角度的理解

联邦学习(Federated Learning):技术角度的理解 学习笔记 B站学习链接:https://www.bilibili.com/video/BV1YK4y1G7jw/?p7&vd_source7def3d3fc89c6921c7aeadf5e4023d35 1.背景与动机 例子 Example >> 问题&#xff1a…

AES加密解密算法设计(C++)

目 录 1. 背景与意义 4 2. 系统设计 5 2.1系统主要目标 5 2.2主要软件需求(运行环境) 5 2.3功能模块与系统结构 6 3 系统功能程序设计 8 3.1基本要求部分 8 3.1.1 字节替换 8 3.1.2行移位 9 3.1.3列混合 11 3.1.4密钥加 13 3.1.5密钥扩展 14 …

神经网络训练多少次合适,神经网络训练时间多长

1、tensorflow 训练一个神经网络 需要多长时间 基本使用 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使用 tensor 表示数据. 通过 变量 (Variable) 维护状态. 使用 feed 和 fetch 可以…

【附源码】计算机毕业设计SSM实验室设备明细管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【自监督论文阅读笔记】Simmim: A simple framework formasked image modeling

本文介绍了 SimMIM,这是一个用于 掩码图像建模 的简单框架。本文简化了最近提出的相关方法,无需特殊设计,例如通过离散 VAE 或聚类 进行 block-wise 分块级的掩码 和 tokenization。为了研究 是什么让掩码图像建模任务学习良好的表示&#xf…

nginx----(1)nginx的单机安装

文章目录Nginx卸载开源版Nginx安装默认简单安装Nginx的源码复杂安装防火墙问题nginx启停安装成系统服务Nginx卸载 步骤一:需要将nginx的进程关闭 ./nginx -s stop步骤二:将安装的nginx进行删除 rm -rf /usr/local/nginx步骤三:将安装包之前编译的环境清除掉 mak…

opc client 客户端软件测试工具

一、概述: 本软件一款OPC客户端测试工具,使用本软件连接到OPC server服务端,获取server数据,简单好上手,软件也很小巧,操作便利,也是绿色软件,免安装。 二、软件基础环境保证&#x…

期货交易结算信息(期货结算系统)

期货中的结算价是怎么计算出来的? 最近常有新手投资者问:为什么期货账户收盘时年持仓是盈利的,怎么当天结算单上却是亏损的? 之所以会有这个疑问,是因为投资者没有明白期货收盘价、结算价、成交价三者之间的关系。今天…

dockerfile编写构建镜像

文章目录一、dockerfile1、什么是dockerfile2、原理二、docker镜像的创建1、创建镜像的三种方法①基于已有镜像创建②基于本地模板创建③基于dockerfile创建三、镜像分层的原理1、docker镜像结构的分层2、bootfs内核空间3、rootfs内核空间4、AUFS与overlay/overlay2overlay结构…

【ViT 微调时关于position embedding如何插值(interpolate)的详解】

目录1. 问题描述2. positional embedding如何interpolate3. 输入的sequence length改变了ViT还能正常前向推断?本文适合对Vision Transformer有一定了解(知道内部结构和一些实现细节,最好是精读过ViT这篇论文)的读者阅读&#xff…

八种可以简单判断否属于过敏体质的表现,符合四条就是了

最早感知春天的不是鸭子,而是过敏的人,最近门诊荨麻疹的人数逐渐增多。近20年来,随着过敏性鼻炎、湿疹、荨麻疹和哮喘的发病率越来越高,过敏体质开始越来越出名。在西医中,容易患上这种过敏性疾病的人被称为过敏体质。…

JVM(九) —— 运行时数据区之堆的详细介绍(四)

JVM(九)—— 运行时数据区之堆的详细介绍(四)TLAB堆空间常用的参数设置HandlePromotionFailure逃逸分析和栈上分配代码优化栈上分配同步省略分离对象或标量替换TLAB 堆区是线程共享区域,任何线程都乐意访问到堆区的共…

智能钢琴-第12届蓝桥杯Scratch省赛1真题第4题

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第52讲。 第12届蓝桥杯青少年组省赛分两次进行,这是2020年10月19日举行的第一次省赛考试初级组,形式为在线考试。Scratch分为初级组和…

java实验报告3:数组和字符串案例练习

目录 内容 利用随机1~9整数生成3*3的二维数组,使二维数组每行,每列、以及斜线上的数字之和均为15,并输出这个二维数组 按自然数从小到大的标准为顺序,对以下数组求其逆序数,并列出逆序对: 实验小结 一、…

眼科考研院校排名及考研难度分析

眼科考研院校排名及考研难度分析 文章目录眼科考研院校排名及考研难度分析基础信息专业介绍学科范围和课程眼科学专业研究方向考研分析学校排名分数线学校推荐就业方向学习材料参考链接基础信息 专业介绍 眼科学(学科代码:100212)是临床医学…

Aptos 域名服务 (ANS) 上线主网

我们很高兴正式推出 Aptos 名称服务 (ANS)。我们正在通过使用 Aptos 构建一流的区块链体验来铺平道路,这就是我们在第一天推出域名服务的原因。 ANS 现在允许所有 Aptos 用户使用人类可读的 .apt 域名作为他们的 Aptos 钱包地址,而不是他们的公钥。 我们…

美化mac系统自带的Terminal.app工具

命令行工具对于开发人员来说,使用还是比较频繁的,但是mac自带Terminal.app工具的样式和功能实在一言难尽. 默认的样式 美化后的样式 下面为大家介绍如何操作. 我们使用的是oh-my-zsh 项目地址 我喜欢自己去安装, 不使用自动化脚本, 这样可以记录修改了哪些文件, 安装的文件…

黑盒测试-场景法

黑盒测试-场景法 1.场景法 1.1简介 1.简介:软件系统要想获得用户的认可,必须站在用户的角度, 以用户的使用逻辑及操作习惯为出发点,设计测试用例时 考虑用户使用软件的流程。然后,依据这些流程设计用例 设计才能更贴…

Day09-尚品汇-购物车静态组件与修改

一:把购物车成功页面的两个按钮完善一下(第一个) 1.在AddCartSuccess组件里面: 1.的后续 1》点这个 2》跳转会购物车的页面 二:把购物车成功页面的两个按钮完善一下(第二个) 1.先在文档里面找到…

供应氨基-PEG-多巴胺,NH2-PEG-Dopamine,Amine-PEG-DOPA

1:描述 NH2-PEG-Dopamine,Amine-PEG-DOPA(氨基-聚乙二醇-多巴胺),试剂所属分类为Amine PEG Dopamine PEG,质量控制为95%,该试剂应于 -20℃长期保存,暗黑,干燥处保存。 …