#Android 如何让打包出来的apk或者aab文件名更有规律?
问题背景
Android Studio中,打包项目时,不论是debug还是release,不管是apk还是未来的aab,文件名一般都是很没有辨识度的,例如
- app-debug.apk
- app-release.apk
- app.aab
有什么办法让文件名更有规律一点呢?比如带上版本号之类的。
解决方法
一般使用gradle工具进行打包,通过修改build.gradle可以修改输出包的名字。
有两种做法:
方法1. 设置outputFileName
示例
applicationVariants.all {
outputs.forEach { output ->
if (output is com.android.build.gradle.internal.api.BaseVariantOutputImpl) {
output.outputFileName =
"${applicationId}-v${versionName}(${this.versionCode})-${name}.${output.outputFile.extension}"
}
}
}
输出结果
com.example.sampleproject-v1.0.0(101)_release.apk
需要注意的是
这个设置只对apk有效,对于app bundle,也就是谷歌马上要强制推行的aab文件是无效的。
需要使用下一个方案。
方法2. 设置archivesBaseName
archivesBaseName的话,只是最终输出文件的基本名,不含文件后缀,所以,可以对任何输出结果都有效。
示例
android {
...
defaultConfig {
...
setProperty("archivesBaseName", "${applicationId}-v${versionName}(${versionCode})")
}
}
输出结果
com.example.sampleproject-v1.0.0(101)-release.apk
或者
com.example.sampleproject-v1.0.0(101).aab
如果想要把git提交的commit号也添加到输出文件里,可以用以下设置
def gitCommit = "git rev-parse --short HEAD".execute().text.trim()
archivesBaseName = "${defaultConfig.applicationId}-${defaultConfig.versionName}v${defaultConfig.versionCode}-${gitCommit}"
println 'outputFileName: after = ' + archivesBaseName
完美。
参考
- https://medium.com/@giorgos.neokleous93/name-your-apk-aab-files-3cf3d123a48c
- https://stackoverflow.com/questions/52508720/how-to-change-the-generated-filename-for-app-bundles-with-gradle