完美处理 Android App 的 apk 输出路径与文件名

实现代码

复制代码
buildTypes {

        // ...
    
        
        applicationVariants.all {
            variant ->
                variant.outputs.all {
                    Calendar calendar = Calendar.getInstance(Locale.CHINA);
                    def buildDate = String.format(Locale.CHINA, "%04d%02d%02d", calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH))
                    def versionName = variant.versionName
                    def versionCode = variant.versionCode
                    //项目名-版本名-版本号-release/debug.apk
                    if (variant.buildType.name.equals('release')) {
                        variant.getPackageApplication().outputDirectory = new File("ApkOutputs/release")
                        outputFileName = "${rootProject.getName()}-v${versionName}-${versionCode}-${buildDate}-release.apk"
                    } else {
                        variant.getPackageApplication().outputDirectory = new File("ApkOutputs/debug")
                        outputFileName = "${rootProject.getName()}-v${versionName}-${versionCode}-${buildDate}-debug.apk"
                    }
                }
        }
    }

效果

相关推荐
傲世仙尊3 分钟前
设计者的取舍-路径fork的诞生与全局文件队列
linux
zttbee3 分钟前
前端测试内容
前端
逐流人7 分钟前
Containerd容器管理实战:从架构原理到nerdctlcrictl工具链
linux·运维·云原生·容器·云计算·containerd
2603_965896628 分钟前
async/await|JS同步写法解决异步终极方案
前端·javascript
Tairitsu_H13 分钟前
[Linux] 编辑器vim、编译器和动静态链接
linux·vim·gcc·g++·动态链接·静态链接
lzx_00213 分钟前
Linux指令(一) 简单了解部分指令
linux
小则又沐风a21 分钟前
深入理解TCP协议----滑动窗口,流量控制
linux·网络协议·tcp
A24207349302 小时前
TCP 三次握手与四次挥手:从原理到状态机一次讲清
前端
GreenTea9 小时前
GrokBot 核心成员 Lauren Tan:每月交付 2000 个 PR 的人,是怎么用 AI 的
前端·后端·架构
北京自在科技10 小时前
谷歌 Find Hub 迎来新版本更新
android·安卓