android 自定义文件名和日期——android 打包技巧——不覆盖历史成功文件和版本-默认打包缺陷

ops/2025/2/13 15:55:43/

一、传统方式

传统方式打包在 文件夹”app\release“下生成”app-release.apk“


1. 多应用易混淆问题
同一项目多变体场景
当项目存在多个不同的构建变体时,例如不同的渠道包(如应用宝渠道、华为应用市场渠道等)、不同的版本类型(免费版、付费版),每个变体都使用 “app-release.apk” 文件名,就会导致这些 APK 文件难以区分。比如在为不同渠道打包时,各个渠道可能有不同的配置和资源,若都以相同文件名保存,很容易搞混哪个 APK 对应哪个渠道,在后续的分发和测试过程中会带来极大的不便。

多项目开发场景
如果开发者同时负责多个 Android 项目的开发,每个项目都使用传统方式打包,那么在 “app\release” 文件夹下都会生成 “app-release.apk” 文件。当需要对这些 APK 进行管理、上传到应用市场或者分发给测试人员时,就无法直观地通过文件名来识别每个 APK 所属的项目,增加了误操作的风险。

2. 重命名麻烦
手动重命名效率低
每次打包完成后,如果需要对 “app-release.apk” 进行重命名以区分不同的版本或构建变体,就需要手动在文件系统中进行操作。这不仅耗费时间,而且容易出错,特别是在需要频繁打包的情况下,手动重命名会成为一项繁琐的重复性工作。

不利于自动化流程
在自动化构建和持续集成/持续部署(CI/CD)流程中,手动重命名无法与脚本和工具集成,会破坏整个流程的连贯性。例如,使用 Jenkins 或 GitLab CI 进行自动化打包时,无法自动对生成的 APK 进行有意义的命名,需要额外编写复杂的脚本来处理重命名逻辑,增加了开发和维护的成本。

3. 新老版本管理困难
版本号识别不直观
“app-release.apk” 文件名中没有包含版本号信息,无法从文件名直接看出该 APK 对应的是哪个版本。在进行版本迭代时,很难快速区分新老版本,尤其是在需要回滚到旧版本或者对比不同版本的功能时,会浪费大量时间去查找和确认版本信息。

版本归档和追溯不便
由于缺乏版本标识,在对 APK 进行归档和管理时,难以建立有效的版本历史记录。当出现问题需要追溯特定版本的 APK 时,无法快速定位到相应的文件。而且在保存多个版本的 APK 时,由于文件名相同,可能会导致旧版本被新版本覆盖,造成版本信息的丢失。

4. 缺乏环境和构建信息
无法区分构建环境
传统的文件名无法体现 APK 是在哪个环境下构建的,例如是开发环境、测试环境还是生产环境。不同环境下的 APK 可能会有不同的配置和依赖,无法通过文件名区分这些 APK 会给测试和部署工作带来困扰。

缺少构建时间等信息
文件名中没有包含构建时间等重要信息,无法直观地了解 APK 的生成时间。在进行问题排查和版本管理时,构建时间是一个重要的参考因素,缺乏该信息会增加问题定位的难度。 

二、新打包方式

三、实现代码

 

buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}

修改为

  buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'android.applicationVariants.all { variant ->variant.outputs.all {outputFileName = "未来之窗仙盟_${cyberwin_nowtime()}.apk"}}}}

四、日期函数

def cyberwin_nowtime() {return new Date().format("yyyy年MM月dd日HH_mm_ss", TimeZone.getTimeZone("UTC"))
}


http://www.ppmy.cn/ops/158078.html

相关文章

网络安全之攻防笔记--web安全攻防

通用漏洞SQL SQL注入 针对数据库的攻击手法,通过在输入字段中插入恶意的SQL代码,改变或破坏原本预期的SQL注入查询 基于注入参数类型 数字型注入、字符型注入 基于请求提交方式 GET注入、POST注入 基于获取信息方式 有回显的注入 联合查询注入、基于报错…

Redis存储⑥Redis五大数据类型之 Zset

目录 1. Zset 有序集合 1.1 Zset 有序集合常见命令 zadd zcard zcount zrange zrevrange zrangebyscore(弃用) zpopmax bzpopmax zpopmin bzpopmin zrank zrevrank zscore zrem zremrangebyrank zremrangebyscore zincrby 1.2 Zset有…

青少年编程与数学 02-009 Django 5 Web 编程 06课题、模型定义

青少年编程与数学 02-009 Django 5 Web 编程 06课题、模型定义 一、模型二、定义模型1. 导入模型类2. 定义模型类3. 定义字段4. 添加元数据(可选)5. 定义模型方法(可选)6. 迁移模型 三、模型字段字符字段数字字段日期和时间字段布…

《探秘AI绿色计算:降低人工智能硬件能耗的热点技术》

在人工智能飞速发展的当下,其硬件能耗问题愈发凸显。据国际能源署预测,人工智能的能源消耗可能大幅增长。因此,降低人工智能硬件能耗,实现绿色计算,已成为行业关键课题。以下是一些正在崭露头角的热点技术。 新型硬件…

Linux之kernel(1)系统基础理论(2)

Linux之Kernel(1)系统基础理论(2) Author: Once Day Date: 2025年2月10日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: Linux内核知识_Once-Day的…

爬虫抓取过程的详细步骤

1. 目标网站分析 在开始编写爬虫之前,首先需要对目标网站进行详细的分析。这一步是整个爬虫开发过程中非常重要的环节,因为它直接决定了爬虫的效率和成功率。 确定目标数据:明确你想要抓取的数据,例如商品名称、价格、描述、图片…

HCIA项目实践--RIP相关原理知识面试问题总结回答

9.4 RIP 9.4.1 补充概念 什么是邻居? 邻居指的是在网络拓扑结构中与某一节点(如路由器)直接相连的其他节点。它们之间可以直接进行通信和数据交互,能互相交换路由信息等,以实现网络中的数据转发和路径选择等功能。&am…

使用 npx tailwindcss init 时发生 npm error could not determine executable to run 错误

介绍 当我尝试将 TailwindCSS 引入 React 时出现了错误,因此我写了一篇有关它的文章。 问题 当我像以前一样运行安装命令时,出现错误。 解决 比以往更加简单 $ npm install -D tailwindcss3.4.13 autoprefixer postcss $ npx tailwindcss init -p…