我正在尝试提取和使用工件的体系结构构成输出文件名:
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
}
}
*将其放入您的模块(app)build.gradle文件中。
此代码对我有用,而gradle 3 for android
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
def architecture = output.filters[0].identifier
outputFileName = "myapp-${architecture}-${variant.versionName}.apk"
}
}
您在哪里定义了此功能?尝试将其移动您的应用/build.gradle文件,因为那是buildscript所在的地方,而gradle将类从中加载到类中。
因此,遵循@blazsolar建议,我将方法移到了应用程序构建gradle文件中,当我尝试添加导入时,移动本身不是解决方案:
import com.android.build.OutputFile
由于某种原因,IDE(Android Studio)决定删除导入。
,但是一旦我进行此导入:
import com.android.build.OutputFile.FilterType
很好!但这还不是结束...我希望该方法可以在一个普通的gradle文件中,我所有的项目都可以重复使用。
一旦我将最后一个导入添加到普通的gradle文件中...导入的数字再次消失了。
我还有另一个问题
更新:
所以我已经将Android插件和Gradle版本分别更新为3.0.1和4.1,现在...事情已经改变了。。现在没有
com.android.build.OutputFile.FilterType
现在您需要使用:
com.android.build.VariantOutput.ABI
以防万一有人想知道...