我正在尝试提取并使用 Artifact 的架构来组成输出文件名:
void defineDefaultVariantsAPK(String appName) {
defineVariantsAPK({ variant, output ->
def versionName = variant.versionName
def versionCode = "-(${variant.versionCode}"
def buildLetter = variant.buildType.name == "release" ? "-R" : "-D"
def flavor = variant.productFlavors.size() > 0 ? "-${variant.productFlavors[0].name}" : ""
def architecture = "-" + output.getFilter(com.android.build.OutputFile.ABI)
"v${versionName}${versionCode}${buildLetter}${flavor}${architecture}--${appName}.apk"
})
}
void defineVariantsAPK(Closure nameBuild) {
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File((String) output.outputFile.parent, nameBuild(variant, output))
}
}
}
}
出于某种原因,很多帖子都说这是解决方案,但我的 gradle 失败了:
> Could not get unknown property 'com' for project ':app' of type org.gradle.api.Project.
我试过使用导入:
unable to resolve class com.android.build.OutputFile
配置:
com.android.tools.build:gradle:2.3.3
Gradle version 3.5
所以我真的很想知道,我做了什么不同的事情,它不起作用?
最佳答案
从 Gradle 3.0.0 开始,您可以这样做:
applicationVariants.all { variant ->
variant.outputs.all { output ->
def appName = "AppName_"
def buildType = variant.variantData.variantConfiguration.buildType.name
def architecture = output.getFilter(com.android.build.OutputFile.ABI)
def newName
if (buildType == 'debug') {
newName = "${appName}debug_${defaultConfig.versionName}_${architecture}.apk"
} else {
newName = "${appName}release_${defaultConfig.versionName}_${architecture}.apk"
}
outputFileName = newName
}
}
*将其放入您的模块(应用程序)build.gradle 文件中。
关于具有相应 ABI 架构的 Android APK Artifact 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47808123/