背景
随着新版本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"
}
}
}