就在昨天AS3.0正式发布了. 下载地址
同样的, Gradle 插件也更新到了3.0, 但是当我们更新到3.0的时候, 很多dsl 无法使用了, 其中就有一个本人比较喜欢的api改变了, 就是修改打包生成的APK文件名.
在未更新之前:
getApplicationVariants().all { variant ->
variant.outputs.each { output ->
def fileName = "AppName-${defaultConfig.versionName}_" +
"${releaseTime()}_" +
"${variant.productFlavors[0].name}_" +
"${variant.buildType.name}_" +
"${if (variant.signingConfig == null) "unsigned" else variant.signingConfig.name}.apk"
//可以通过这个方法修改输出文件名
output.outputFile = new File(output.outputFile.parent, fileName)
}
}
更新3.0之后, 上面的方法就会报错.
3.0可以使用以下方法修改:
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 + "_" +
apk_time + "_" +
variant.flavorName + "_" +
variant.buildType.name + "_" +
variant.signingConfig.name +
".apk"
}
}
具体的API更改说明可以查看:
https://developer.android.google.cn/studio/build/gradle-plugin-3-0-0-migration.html#variant_api
据说是为了加快编译速度.
同时
更新到Gradle 3.0之后,如果你有 productFlavors
, 那么必须定义 flavorDimensions
, 其次生成的apk name会根据productFlavors.name
命名.
android{
...
flavorDimensions "type" //这个是必须的
...
productFlavors{
dev{
dimension "type" //并且必须使用这个dimension
}
pre{
dimension "type" //并且必须使用这个dimension
}
apk{
dimension "type" //并且必须使用这个dimension
}
}
}
apk名如下:
dev-debug.apk
dev-release.apk
pre-debug.apk
pre-release.apk
apk-debug.apk
apk-release.apk
如果你声明了多个 productFlavors
, 那么每个都要使用, 否则会编译不过.
android{
...
flavorDimensions "type", "type2"
...
productFlavors{
dev{
dimension "type"
}
pre{
dimension "type"
}
apk{
dimension "type2" //type2 也必须使用
}
}
}
这样生成的apk名字就会是 (type 对应的 productFlavors.name
)+ (type2 对应的 productFlavors.name
) .
上面的就会是:
devApk-debug.apk
devApk-release.apk
preApk-debug.apk
preApk-release.apk
这样就可以通过productFlavors.name
达到修改APK的文件名.
联系作者
请使用QQ扫码加群, 小伙伴们在等着你哦!
关注我的公众号, 每天都能一起玩耍哦!