在Android Studio Gradle中如何按构建类型自定义AAB文件名
Gradle自定义AAB输出文件名问题排查与实现方案
原有配置问题分析
第一种配置失效原因
- 高版本Android Gradle Plugin(AGP)中,
archivesBaseName全局属性仅对APK打包生效,对AAB格式输出不生效,是配置不生效的核心原因 - 时间戳在配置阶段生成,只要不清理构建缓存,后续增量构建的时间不会更新,不符合实际打包场景需求
第二种配置出现buildType为null的原因
- Gradle构建分为配置阶段和执行阶段,
applicationVariants.all的遍历逻辑属于执行阶段任务,而闭包外的setProperty是配置阶段就会执行的代码,执行顺序早于变量赋值,因此拿到的是null - 全局仅定义一个
buildType变量,多渠道/多构建类型同时打包时会出现值覆盖问题,命名会出现混乱
正确实现方案
在模块级build.gradle的android闭包中添加如下配置即可,兼容AGP 4.0+所有版本:
android { compileSdkVersion 30 buildToolsVersion "30.0.2" targetSdkVersion 30 // 通用参数定义,可按需修改 def projectName = "myapplication" def separator = "_" // 如果需要每次构建都更新时间戳,可将本行移到下方applicationVariants.all闭包内部 def buildTime = new Date().format('yyyyMMdd_HHmm') buildTypes { release { // 保留你原有的release配置,比如混淆、签名配置等 minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } debug { // 保留你原有的debug配置 } } // 自定义输出名称核心逻辑 applicationVariants.all { variant -> // 可选:同时修改APK输出文件名 variant.outputs.each { output -> output.outputFileName = "${projectName}${separator}${variant.buildType.name}${separator}${buildTime}.apk" } // 专门修改AAB输出文件名 variant.bundleProvider.get().outputFileName = "${projectName}${separator}${variant.buildType.name}${separator}${buildTime}.aab" } }
内容的提问来源于stack exchange,提问作者dawonbe
相关产品推荐
相关产品推荐

