修改Android打包apk的名字和目录

app打包生成apk后通常需要进行备份,但是要区分好哪个apk是什么版本的、什么时候打包的,以方便以后区分使用。

最开始的想法是把版本号、创建时间这些加在apk文件名上即可,但是公司要求apk使用一个固定的名称,那我怎么保存版本号信息啊,后来想到可以加一个文件夹,在文件夹名字上加入这些信息即可,示例如一:

app/build.gradle

import java.text.SimpleDateFormatandroid {//release版本输出位置与文件名配置applicationVariants.all { variant ->variant.outputs.all { output ->if (buildType.name == 'release') { //只处理生产版本def createTime = new Date().format("yyyy-MM-dd-kkmmss", TimeZone.getTimeZone("GMT+08:00"))def dirName = "ball_v${defaultConfig.versionName}_${defaultConfig.versionCode}_$createTime"def apkDir = rootProject.file("apk/$dirName")if (!apkDir.exists()) {apkDir.mkdirs()}variant.packageApplicationProvider.get().outputDirectory = apkDir  // 指定apk的输出位置output.outputFileName = "Railway_4G_Platform_ball.apk"             // 指定输出文件名}}}
}

这里省略了很多其它的信息,只贴关键代码,导包是要放在文件的最前面,关键代码要是写在android节点下的。

上面是以前的写法了,现在(今天是2024年03月07日)最新版本Android Studio已经使用了更新的Gradle,而且新创建的项目也默认使用Kotlin作为gradle的脚本语言了,那肯定是要追随官方的脚步啊,于是想把上面的配置翻译成Kotlin的版本,即可发现已经用不了,新版本的Gradle已经不允许那种方式来修改apk的名称了,于是又找了新的方式,感觉新的方式还更专业一些,如下:

import java.time.LocalDateTime
import java.time.format.DateTimeFormatterandroid {    afterEvaluate {tasks.named("assembleRelease") {finalizedBy("copyAndRenameApkTask")}}
}val copyAndRenameApkTask by tasks.registering(Copy::class) {val config = project.android.defaultConfigval versionName = config.versionNameval versionCode = config.versionCodeval formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HHmmss")val createTime = LocalDateTime.now().format(formatter)val destDir = File(rootDir, "apkBackup/big_data_v${versionName}_${versionCode}_$createTime")from("build/outputs/apk/release/app-release.apk")into(destDir)rename { _ -> "Railway_4G_Platform_big_data.apk" }
}

与前面的修改方式对比:

  • 前面的是直接修改了打包apk的位置和apk的文件名。用的是groovy语言。
  • 后面的是打包后apk后复制该apk到指定的位置并进行重命名。用的是kotlin语言,平时写代码也是用Kotlin了,所以使用kotlin还是感觉比较亲切的。

打包两个版本的apk看一效果:
在这里插入图片描述
这样,我就完成了以公司要求的名字去命名apk,同时我使用文件夹名称来保留了apk的版本信息。

我们公司的apk在上传到公司服务器时,除了上传apk外,还需要填写apk的相关信息,比如包名、版本号这些,同时也允许通过上传一个配置文件来指定这些信息,像这样每次打包每次要修改这些信息也是挺烦人的,都说Gradle可以完成自动化的事情,于是让Gradle帮我生成一个不就行了吗,实现这个很简单,在之前的复制重命名的任务中添加生成配置文件的代码即可,如下:

val copyAndRenameApkTask by tasks.registering(Copy::class) {val config = project.android.defaultConfigval versionName = config.versionNameval versionCode = config.versionCodeval applicationId = config.applicationIdval timeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HHmmss")val dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HHmmss")val now = LocalDateTime.now()val createTime = now.format(timeFormatter)val createDate = now.format(dateFormatter)val destDir = File(rootDir, "apkBackup/big_data_v${versionName}_${versionCode}_$createTime")from("build/outputs/apk/release/app-release.apk")into(destDir)rename { _ -> "Railway_4G_Platform_big_data.apk" }doLast {File(destDir, "app上传配置.txt").outputStream().bufferedWriter().use {it.appendLine("版本号:${versionCode}").appendLine("版本名称:${versionName}").appendLine("软件名称:掌上运维").appendLine("软件包名:${applicationId}").appendLine("版本说明:说明").appendLine("发布时间:${createDate}").appendLine("发布状态:1").appendLine("更新类型:0")    // 0-询问更新,1-强制更新到此版本.appendLine("强制更新标记:0") // 0-此版本无需强制更新,1-此版本不能使用,必须更新(此参数始终传0).appendLine("软件分类:1").appendLine("业务分类:1").appendLine("软件级别:1").append("备注:")}}
}

效果如下:
在这里插入图片描述
app上传配置.txt内容如下:

版本号:20240307
版本名称:1.0.0
软件名称:掌上运维
软件包名:cn.dazhou.bluebook
版本说明:说明
发布时间:2024-03-07-154401
发布状态:1
更新类型:0
强制更新标记:0
软件分类:1
业务分类:1
软件级别:1
备注:

另外,还可以把git的提交记录添加到文件夹中,以便可以清楚的知道打包的时候git的当时提交版本是什么,所以,在打包的时候一定要先把所有代码提交了再打包,核心代码如下:

import java.io.ByteArrayOutputStreamfun exec(command: String): String {val outputStream = ByteArrayOutputStream()val process = Runtime.getRuntime().exec(command)process.inputStream.copyTo(outputStream)return outputStream.toString().trim()
}val copyAndRenameApkTask by tasks.registering(Copy::class) {。。。val gitHash = exec("git rev-parse --short HEAD")val destDir = File(rootDir, "apkBackup/big_data_v${versionName}_${versionCode}_${createTime}_$gitHash")。。。
}

另外,由groovy转到kotlin带来的一些改变这里也一并记录一下:

签名配置:

android {signingConfigs {create("release") {storeFile = file("123456.jks")storePassword = "123456"keyAlias = "key0"keyPassword = "123456"}}buildTypes {release {isMinifyEnabled = falseproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")signingConfig = signingConfigs.getByName("release")}}
}

在libs目录中添加jar或aar时的配置:

implementation(fileTree(mapOf("include" to arrayOf("*.jar", "*.aar"), "dir" to "libs")))

对比原来Groovy的配置:

implementation(fileTree(includes: ["*.jar", "*.aar"], dir: "libs"))

仓库设置:

maven {isAllowInsecureProtocol = true // 仓库默认不允许使用非https协议,所以这里设置为允许url = uri("http://192.168.1.251:8081/content/repositories/android_repositories/")
}
maven { url = uri("https://jitpack.io") }

对比原来Groovy的配置:

 maven {allowInsecureProtocol = true // 仓库默认不允许使用非https协议,所以这里设置为允许url 'http://192.168.1.251:8081/content/repositories/android_reposito}maven { url 'https://jitpack.io' } // 用于:RxPermissions

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

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

相关文章

【CSP】2022-03-3 计算资源调度器 stl大模拟使用map优化索引 完整思路+完整的写代码过程(遇到的问题)+完整代码

2022-03-3 计算资源调度器 stl大模拟使用map优化索引 2022-03-3 计算资源调度器 stl大模拟使用map优化索引思路写代码的过程(遇到的问题)完整代码 2022-03-3 计算资源调度器 stl大模拟使用map优化索引 在联系了之前那么多道stl大模拟题后,终…

德人合科技|天锐绿盾加密软件——数据防泄漏系统

德人合科技是一家专注于提供企业级信息安全解决方案的服务商,提供的天锐绿盾加密软件是一款专为企业设计的数据安全防护产品,主要用于解决企事业单位内部敏感数据的防泄密问题。 www.drhchina.com PC端: https://isite.baidu.com/site/wjz012…

Redis精讲

redis持久化 RDB方式 Redis Database Backup file (redis数据备份文件), 也被叫做redis数据快照. 简单来说就是把内存中的所有数据记录到磁盘中. 快照文件称为RDB文件, 默认是保存在当前运行目录. [rootcentos-zyw ~]# docker exec -it redis redis-cli 127.0.0.1:6379> sav…

速卖通商品采集API:关键字搜索商品item_search、获取商品详情item_get

item_get-获得aliexpress商品详情 item_search-按关键字搜索aliexpress商品 公共参数 请求地址: aliexpress.item_search/aliexpress.item_get 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是…

03-安装配置jenkins

一、安装部署jenkins 1,上传软件包 为了方便学习,本次给大家准备了百度云盘的安装包 链接:https://pan.baidu.com/s/1_MKFVBdbdFaCsOTpU27f7g?pwdq3lx 提取码:q3lx [rootjenkins ~]# rz -E [rootjenkins ~]# yum -y localinst…

windows下pytorch的dataloader多进程(num_workers)问题,为何num_workers的值只能为0?

问题背景介绍 本人是windows系统,在使用torch.utils.data.Dataloader加载torchvision中的数据集时,将其中的形参num_workers设置为了大于0的数,然后出现以下错误。 原因 在 Windows 系统下,num_workers 参数在使用 PyTorch 的 t…

记一次 .NET某设备监控自动化系统 CPU爆高分析

一:背景 1. 讲故事 先说一下题外话,一个监控别人系统运行状态的程序,结果自己出问题了,有时候想一想还是挺讽刺的,哈哈,开个玩笑,我们回到正题,前些天有位朋友找到我,说…

VideoDubber时长可控的视频配音方法

本次分享由中国人民大学、微软亚洲研究院联合投稿于AAAI 2023的一篇专门为视频配音任务定制的机器翻译的工作《VideoDubber: Machine Translation with Speech-Aware Length Control for Video Dubbing》。这个工作将电影或电视节目中的原始语音翻译成目标语言。 论文地址&…

购买须知:腾讯云服务器99元一年限制月流量300GB

腾讯云99元服务器限制月流量吗?是的,限制月流量,每月提供300GB月流量,超出部分的流量,需要额外支付流量费,价格为0.8元每GB。可以在腾讯云百科 txy.wiki 查看当前99元服务器详细配置和最新的优惠券信息。如…

linux上安装fastdfs及配置

一、基础环境准备 1、所需软件 名称说明libfastcommonfastdfs分离出的一些公用函数包fastdfsfastdas软件包fastdfs-nginx-modulefastdfst和nginx的关联模块nginxnginxl软件包 2、编辑环境 安装一些基础的支持环境 yum install git gccc gcc-c make automake autoconf libto…

复制表

目录 复制表 将部门 30 的所有员工信息保存在 emp30 表中 将复杂查询结果创建为表 只将 emp 表的结构复制为 empnull 表 从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 复制表 严格来说,复制表不是复制操作&am…

Node.Js编码注意事项

Node.js 中不能使用 BOM 和 DOM 的 API,可以使用 console 和定时器 APINode.js 中的顶级对象为 global,也可以用 globalThis 访问顶级对象 浏览器端js的组成 Node.js中的JavaScript组成 相比较之下发现只有console与定时器是两个API所共有的&#xff…

Graphpad Prism10.2.1(395) 安装教程 (含Win/Mac版)

GraphPad Prism GraphPad Prism是一款非常专业强大的科研医学生物数据处理绘图软件,它可以将科学图形、综合曲线拟合(非线性回归)、可理解的统计数据、数据组织结合在一起,除了最基本的数据统计分析外,还能自动生成统…

windows server 2019 服务器配置的方法步骤

一、启用远程功能二、测试三、解决多用户登录的问题 一、启用远程功能 右键点击【此电脑】–【属性】,进入“【控制面板\系统和安全\系统】”,点击-【远程设置】(计算机找不到就使用【winE】快捷键) 2、在“远程桌面”下方,点击【允许远程连…

多核多cluster多系统之间缓存一致性概述

目录 1.思考和质疑2.怎样去维护多核多系统缓存的一致性2.1多核缓存一致性2.2多Master之间的缓存一致性2.3dynamIQ架构同一个core中的L1和L2 cache 3.MESI协议的介绍4.ACE维护的缓存一致性5.软件定义的缓存和替换策略6.动图示例 本文转自 周贺贺,baron,代…

StableDiffusion3 官方blog论文研究

博客源地址:Stable Diffusion 3: Research Paper — Stability AI 论文源地址:https://arxiv.org/pdf/2403.03206.pdf Stability.AI 官方发布了Stable diffusion 3.0的论文研究,不过目前大家都沉浸在SORA带来的震撼中,所以这个水…

JavaScript基础Ⅱ

接上文 JavaScript基础Ⅰ JavaScript基础Ⅰ-CSDN博客 目录 第2章 JavaScript基础语法(掌握) 11-JS代码调试 12-JS函数 第3章 JS事件 14-事件的绑定方式 常用事件(了解) 15-常用事件 第4章 JS内置对象(掌握) 16-数组 17-日期 18-数学运算 19-数字 20-全局函数 第2章…

CrossOver2024实现Mac/Linux上快速运行Win软件和游戏

作为软件产品专家,我对各类软件都有较为深入的了解,下面介绍CrossOver2024这款软件的功能特点。 CrossOver2024是一款功能强大的类虚拟机软件,它的设计目标是在Mac和Linux系统上实现Windows软件和游戏的快速运行。这款软件不仅具有出色的兼容…

【SSM】整合原理和配置实战

文章目录 SSM整合是什么?SSM整合核心问题第一问:SSM整合需要几个IoC容器?第二问:每个IoC容器对应哪些类型组件?第三问:IoC容器之间关系和调用方向?第四问:具体多少配置类以及对应容器…

Mybatis-Plus——04,自动填充时间(新注解)

自动填充(新注解) 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…