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

效果

相关推荐
无限码农6 分钟前
Linux上通过cmake编译uchardet
linux·运维·服务器
Listen·Rain18 分钟前
Vue3:setup详解
前端·javascript·vue.js
-SOLO-1 小时前
停止gradle命令
android
_祝你今天愉快1 小时前
Android Binder 驱动 - 启动 ServiceManager 进程
android
农村小镇哥1 小时前
ThinkPHP-MVC什么是框架
android
Patrick_Wilson1 小时前
修好 bug 只是开始:一次由监控需求反向重构日志结构的复盘
前端·监控·数据可视化
运维大师1 小时前
【Linux运维极简教程】06-网络配置与管理
linux·运维
kyriewen1 小时前
面试官让我优化一个卡死的表格,我打开 Claude 五秒重写,他放下咖啡问我要不要来当组长
前端·javascript·面试
换元不配限2 小时前
Jetpack Compose 状态管理指南
android·状态管理·compose·状态·单向数据流·jetpack compose·状态容器
小粉粉hhh2 小时前
React(二)——dom、组件间通信、useEffect
前端·javascript·react.js