Gradle多渠道打包动态修改apk文件名字

背景

随着新版本Android studio的发布,与之配套使用的Gradle也有很多变化,下面主要列举对比新老版本自定义apk生成文件名的方式。

新版本Android studio 下载地址
Gradle3.0前后版本变更记录 详情

Gradle3.0修改apk文件名的方式

android {
    ...
    applicationVariants.all { variant ->
        //这个修改输出的APK路径
     if (variant.buildType.name != "debug") {//防止AS无法安装debug包(apk)
        variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apk")
     }
        variant.getPackageApplication().outputScope.apkDatas.forEach { apkData ->
            //这个修改输出APK的文件名
            apkData.outputFileName = "AppName-" +
                    variant.versionName + "_" +
                    variant.flavorName + "_" +
                    variant.buildType.name + "_" +
                        releaseTime()+"_"+
                    ".apk"
        }
    }
    ...
}

3.0之后修改apk文件名的方式

android {
    ...
    android.applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "${variant.flavorName}-v${versionName}-${variant.buildType.name}-build${versionCode}-${releaseTime()}.apk"
                }
            }
    ...
}

多渠道的配置注意事项

通常自定义apk文件名往往都跟多渠道打包相关联,这里就提一下Gradle3.0之后多渠道配置需要注意点。

  • 需要配置flavorDimensions
  • 配置的flavorDimensions 必须使用到,不然会报错
// Specifies a flavor dimension.
flavorDimensions "color"

productFlavors {
     red {
      // Assigns this product flavor to the 'color' flavor dimension.
      // This step is optional if you are using only one dimension.
      dimension "color"
      ...
    }

    blue {
      dimension "color"
      ...
    }
}

最终的完整脚本

def releaseTime() {
    return new Date().format("yyyy.MM.dd", TimeZone.getTimeZone("UTC"))
}
android {
    defaultConfig {
        
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
            // 移除无用的resource文件
//            shrinkResources true
//            zipAlignEnabled true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            android.applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "${variant.flavorName}-v${versionName}-${variant.buildType.name}-build${versionCode}-${releaseTime()}.apk"
                }
            }
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    flavorDimensions "app"
    productFlavors {
        demo1 {
            dimension "app"
        }
        demo2 {
            dimension "app"
        }
        demo3 {
            dimension "app"
        }
    }
}

你可能感兴趣的:(Gradle多渠道打包动态修改apk文件名字)