Android Gradle 使用Task打包APK配置指定输出目录和文件名

想要实现的效果

  1. 通过运行Gradle的Task来执行打包操作,无需使用Android Studio的UI操作
  2. 指定APK文件的输出目录和文件名,需要包含:版本类型根项目名打包时间
  3. 证书不加入版本控制,密码等敏感信息不写入build.gradle

本例中:

  1. Gradle版本:8.7
  2. AGP版本:8.5.0

操作步骤

生成证书文件

本例中我们为debugrelease版本分别创建一个证书文件,密码均使用UUID生成,放在项目根目录下的jks目录中,该目录不加入版本控制,将其加入.gitignore并标记为排除目录

  1. Android Studio中点击菜单 Build-Generate Signed App Bundle/APK,直接选择下一步,点击Create New...
  2. Key store path为整数文件的保存路径,Password为证书文件密码,后续对应storePassword字段
  3. Key标签下的: Alias一般填debugreleasePassword为Alias密码,后续对应keyPassword字段
  4. 点击OK后文件就已生成好,原打包窗口直接取消退出

创建密码文件

jks目录中创建文件props.properties,内容如下:

DEBUG_FILE=/jks/debug.jks
DEBUG_KEY_ALIAS=debug
DEBUG_STORE_PASSWORD=f3e592cc-****-****-****-************
DEBUG_KEY_PASSWORD=dc29857c-****-****-****-************RELEASE_FILE=/jks/release.jks
RELEASE_KEY_ALIAS=release
RELEASE_STORE_PASSWORD=7d5fa3e1-****-****-****-************
RELEASE_KEY_PASSWORD=d0535f98-****-****-****-************

这里分别配置了debugrelease版本的:证书路径,证书密码,Alias,Alias密码;具体值与上一步生成证书时填写的内容一致,后续build.gradle文件将从这里引用

build.gradle

修改子项目的build.gradle文件,加入如下内容,如果对应结构已存在,在其基础上增加,不要删除原内容:

//引入密码文件
def props = new Properties()
props.load(new FileInputStream(rootProject.file("/jks/props.properties")))
// 按照指定格式生成打包时间
static def packageTime() {return new SimpleDateFormat("yyyy-MM-dd_HHmmss").format(new Date())
}android {applicationVariants.configureEach { variant ->variant.outputs.configureEach { output ->// 指定打包目录variant.getPackageApplicationProvider().get().outputDirectory = rootProject.file("/apk/${buildType.name}")// 指定打包文件名outputFileName = "${rootProject.name}-${buildType.name}-${packageTime()}.apk"}}// 签名配置,引用密码文件内容signingConfigs {debug {storeFile rootProject.file(props['DEBUG_FILE'])keyAlias props['DEBUG_KEY_ALIAS']storePassword props['DEBUG_STORE_PASSWORD']keyPassword props['DEBUG_KEY_PASSWORD']v1SigningEnabled truev2SigningEnabled true}release {storeFile rootProject.file(props['RELEASE_FILE'])keyAlias props['RELEASE_KEY_ALIAS']storePassword props['RELEASE_STORE_PASSWORD']keyPassword props['RELEASE_KEY_PASSWORD']v1SigningEnabled truev2SigningEnabled true}}// 引用签名配置buildTypes {debug {signingConfig signingConfigs.debug}release {signingConfig signingConfigs.release}}
}

执行Task

默认情况下右侧的Gradle Task列表中只有一两个任务,我们需要的任务没有显示出来:

  1. 点击菜单File-Setting

  2. 左侧选择Experimental,勾选Configure all Gradle tasks during Gradle Sync,确认

  3. 随便修改一点build.gradle文件,点击弹出的提示执行同步操作,或者直接点击右上角工具栏的小象按钮执行同步,Task列表将生成完整的任务列表

  4. 在子项目的 Task-other折叠中即可看到assembleDebugassembleRelease任务,对应两个版本的打包操作

  5. 此时直接执行还会报一个警告(但不影响APK生成),可以在build.gradle末尾增加如下内容解决

    // 禁用任务 https://blog.csdn.net/ismartv_dagou2/article/details/127392262
    tasks.configureEach { task ->if (task.name.contains("ReleaseApkListingFileRedirect")) { // 过滤releasetask.enabled = false}
    }
    

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

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

相关文章

【思科】IPv6 过渡技术 - IPv6 in IPv4隧道

【思科】IPv6 过渡技术 - IPv6 in IPv4隧道 实验要求实现思路IPv6 in IPv4 与 GRE 不同点注意点配置R1基础配置OSPFv3 局域网可达 R2基础配置局域网环境(OSPFv3):IPv6 网络IPv6 in IPv4隧道 R3R4基础配置局域网环境(OSPFv3):IPv6 网络IPv6 in IPv4隧道 R…

【机器学习】——【线性回归模型】——详细【学习路线】

目录 1. 引言 2. 线性回归理论基础 2.1 线性模型概述 2.2 最小二乘法 3. 数学基础 3.1 矩阵运算 3.2 微积分 3.3 统计学 4. 实现与应用 4.1 使用Scikit-learn实现线性回归 4.2 模型评估 5. 深入理解 5.1 多元线性回归 5.2 特征选择 5.3 理解模型内部 6. 实战与项…

【智能算法】人工免疫算法

目录 一、概述 二、人工免疫算法主要特点 2.1自适应性 2.2 鲁棒性 2.3 多样性 2.4 并行性 三、人工免疫算法基本原理 四、人工免疫算法应用领域 五、人工免疫算法matlab代码解析 一、概述 人工免疫算法(Artificial Immune Algorithm,简称AIA)是一种模拟自然界中免疫…

算法学习DAY01

目录 一、算法优劣的核心指标 二、常数时间操作 1、常见的常数时间的操作 2、位运算 &#xff08;1&#xff09;&#xff08;<<&#xff09;左移运算符 &#xff08;2&#xff09;&#xff08;>>&#xff09;右移运算符 &#xff08;3&#xff09;&#xff0…

第27课 原理图的简介

什么是原理图&#xff1f; 原理图就是由元器件连接而成的电路图&#xff0c;它表征了你所设计电路的基本原理。 原理图上的所有元器件&#xff0c;都要从你所画好的元器件符号库中调用。元器件的信息会显示在原理图上&#xff0c;如型号、位号、特性值等。 按照我们的设计&am…

WPF/C#:数据绑定到方法

在WPF Samples中有一个关于数据绑定到方法的Demo&#xff0c;该Demo结构如下&#xff1a; 运行效果如下所示&#xff1a; 来看看是如何实现的。 先来看下MainWindow.xaml中的内容&#xff1a; <Window.Resources><ObjectDataProvider ObjectType"{x:Type local…

【2024.6.25】今日 IT之家精选新闻

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

电线电缆电性能试验方法练习题

一、单选题 1.单、双臂电桥的测量范围,下面哪个符合( )。 A、单臂电桥范围1-99.9Ω B、单臂电桥范围100Ω以上 C、单臂电桥范围1Ω以下 D、根据操作者爱好 参考答案:B 解析:GB/T 3048.4-2007 1 2.根据《电线电缆电性能试验方法第4部分:导体直流电阻试验》GB/T 3048.4…

电源集成:智能真无线耳机设计中的通信接口

真无线耳机&#xff08;TWS 耳机&#xff09;由于电池寿命更长、功能更强大、设计更吸引人以及价格更优惠&#xff0c;因此继续变得更具吸引力。随着耳机制造商专注于小型化和设计改进&#xff0c;并迅速采用功能来增强用户体验&#xff0c;他们能够在强大且竞争激烈的市场中吸…

vue大纲

Vue介绍 Vue是一套用于构建前端用户界面的前端框架 前端开发者主要的工作,就是为了网站的使用者(又称为网站的用户)构建出美观舒适的网页 构建用户界面的传统方式 在传统的web前端开发中,基于jQuery 模板引擎的方式来构建用户界面的 使用vue构建用户界面 使用vue构建用户界面…

提示缺少Microsoft Visual C++ 2019 Redistributable Package (x64)(下载)

下载地址&#xff1a;这个是官网下载地址&#xff1a;Microsoft Visual C 2019 Redistributable Package (x64) 步骤&#xff1a; 第一步&#xff1a;点开链接&#xff0c;找到下图所示的东西 第二步&#xff1a;点击保存下载 第三步&#xff1a;双击运行安装 第四步&#xf…

芒果YOLOv10改进59:主干Backbone篇RepVIT结构:最新重参数化结构 顶会2023 二次改进升级版,最新开源移动端网络架构,速度贼快

💡本篇内容:YOLOv10改进RepVB:最新重参数化结构 顶会2023 二次改进升级版 最新开源移动端网络架构,速度贼快 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv10 按步骤操作运行改进后的代码即可 💡只需订阅这一个专栏即可阅读:芒果YOLOv10所有改进内容 💡本文…

AI大模型企业应用实战(23)-Langchain中的Agents如何实现?

0 前言 这将所有可用的代理按照几个维度进行分类。 预期模型类型 用于聊天模型&#xff08;接收信息&#xff0c;输出信息&#xff09;或 LLM&#xff08;接收字符串&#xff0c;输出字符串&#xff09;。这主要影响所使用的提示策略。 支持聊天历史记录 这些代理类型是否…

智慧互联:Vatee万腾平台展现科技魅力

随着科技的迅猛发展&#xff0c;我们的生活正逐渐变得智能化、互联化。在这个信息爆炸的时代&#xff0c;一个名为Vatee万腾的平台正以其独特的魅力&#xff0c;引领我们走向一个更加智能的未来。 Vatee万腾&#xff0c;这个名字本身就充满了对科技未来的憧憬与期待。作为一家专…

[网络安全产品]---EDR

what EDR&#xff08;Endpoint Detection and Response&#xff0c;端点检测和响应&#xff09;,这是一种技术或者说是解决方案&#xff0c;它记录端点上的行为&#xff0c;使用数据分析和基于上下文的信息检测来发现异常和恶意活动&#xff0c;并记录有关恶意活动的数据&…

Eureka的介绍与使用

Eureka 是 Netflix 开源的一款服务注册与发现组件&#xff0c;在微服务架构中扮演着重要的角色。 一、Eureka 的介绍 工作原理 服务注册&#xff1a;各个微服务在启动时&#xff0c;会向 Eureka Server 发送注册请求&#xff0c;将自身的服务名、实例名、IP 地址、端口等信息注…

vue2 antd 开关和首页门户样式,表格合计

1.首页门户样式 如图 1.关于圆圈颜色随机设置 <a-col :span"6" v-for"(item, index) in menuList" :key"index"><divclass"circle":style"{ borderColor: randomBorderColor() }"click"toMeRouter(item)&qu…

游戏AI的创造思路-技术基础-深度学习(1)

他来了&#xff0c;他来啦&#xff0c;后面歌词忘了~~~~~ 开谈深度学习&#xff0c;填上一点小坑&#xff0c;可又再次开掘大洞 -.-b 目录 1. 定义 2. 深度学习的发展历史和典型事件 3. 深度学习常用算法 3.1. 卷积神经网络&#xff08;CNN&#xff09; 3.1.1. 算法形成过…

Redis-主从复制的准备工作-准备三台redis服务器

文章目录 1、新建三个redis配置文件&#xff0c;用于定义每个服务的专属配置1.1、复制文件redis.conf到redis安装目录下1.2、关闭redis_common.conf中的 aof 功能1.1.1、新建 redis_6379.conf1.1.2、新建 redis_6380.conf1.1.3、新建 redis_6381.conf 2、启动三个服务器2.1、后…

Electron运行报错

安装&#xff1a; npm install --save-dev electron 1&#xff1a;报错&#xff1a; electron Unable to find Electron app at 2&#xff1a; ReferenceError: require is not defined in ES module scope, you can use importinstead 在ES模块作用域中没有定义ReferenceErr…