#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
示例
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defaultConfig { | |
applicationId "com.xmanyou.my.game" | |
minSdkVersion 21 | |
targetSdkVersion 30 | |
versionCode 28 | |
versionName "1.2.5" | |
def gitCommit = "git rev-parse --short HEAD".execute().text.trim() | |
archivesBaseName = "${defaultConfig.applicationId}-${defaultConfig.versionName}v${defaultConfig.versionCode}-${gitCommit}" | |
println 'outputFileName: after = ' + archivesBaseName | |
} | |
// the output will be: | |
// com.xmanyou.my.game-1.2.5v28-943fbca-release.apk | |
// or | |
// com.xmanyou.my.game-1.2.5v28-943fbca.aab | |
// more refer to https://xmanyou.com/android-ru-he-rang-sheng-cheng-de-apk/ | |