当前位置: 首页 > article >正文

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

一、传统方式

传统方式打包在 文件夹”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 false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

修改为

  buildTypes {
        release {
            minifyEnabled false
            proguardFiles 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.kler.cn/a/544465.html

相关文章:

  • 广度优先搜索_钥匙和房间
  • 【Pandas】pandas Series drop
  • [Java] Redis基础
  • LabVIEW与小众设备集成
  • #渗透测试#批量漏洞挖掘#致远互联AnalyticsCloud 分析云 任意文件读取
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之获取省市区列表名称及收货地址列表展示
  • 细胞计数专题 | LUNA-FX7™新自动对焦算法提高极低细胞浓度下的细胞计数准确性
  • 从设计到生产,3D技术如何改变鞋业生态
  • 基于Java SpringBoot以及vue前后端分离的旅游景区网站系统设计与实现
  • AI+智能中台企业架构设计_重新定义制造(46页PPT)
  • Javaweb中,使用Servlet编写简单的接口
  • 如何利用Spring的@Value注解实现配置信息的动态注入与管理?
  • flutter本地推送 flutter_local_notifications的使用记录
  • 十八、vben框架前端编码风格及标准
  • 2024年博客之星年度评选—主题文章创作评审文章得分公布
  • 苹果放弃DeepSeek选择阿里通义,近屿智能助您入局黄金AI领域
  • 本地部署DeepSeek后的调用与删除全攻略
  • AI前端开发:跨领域合作的新引擎
  • Linux运维——系统管理
  • DeepSeek批量生成全平台推广营销内容:高效提升营销效率