完美处理 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"
                    }
                }
        }
    }

效果

相关推荐
源远流长jerry19 小时前
RDMA Memory Region (MR) 机制详解:地址转换与内存保护
linux·服务器·网络·tcp/ip·架构·mr
QD_ANJING19 小时前
2026年大厂前端高频面试原题-React框架200题
开发语言·前端·javascript·react.js·面试·职场和发展·前端框架
Jason__Young19 小时前
Android ViewModel为什么能够跨越Activity的生命周期?
android
happymaker062619 小时前
web前端学习日记——DAY03(盒子模型,flex布局,表格)
前端·学习
c++逐梦人19 小时前
Linux进程信号
linux·服务器
爱丽_19 小时前
Axios 二次封装:拦截器、统一错误处理与文件下载
前端
24白菜头19 小时前
若依框架Ruoyi-Vue-SpringBoot3部署
前端·javascript·笔记·后端·学习
TechMix19 小时前
【性能优化】RenderThread各工作阶段梳理
android·性能优化
清水白石00819 小时前
协程不是线程:深入理解 Python async/await 运行机制
java·linux·python
fengpan200419 小时前
ubuntu下vscode使用串口
linux·运维·服务器