我有一个项目,其中有几个模块,其中一个是安卓库命名(差)为sdk
。当我构建项目时,它输出一个名为sdk.aar
的AAR。
我没能在Android或Gradle文档中找到任何允许我更改AAR输出名称的内容。我希望它有一个basename +版本号像Jar任务做,但我不能弄清楚如何做同样的AAR,因为它的所有配置似乎都隐藏在android。库插件。
在这个阶段重命名模块不是一个选项,这仍然不会将版本号添加到最终的AAR。
如何更改Gradle中com.android.library
生成的AAR的名称?
Gradle解决方案/strong>
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
versionCode 4
versionName '1.3'
testFunctionalTest true
project.archivesBaseName = "Project name"
project.version = android.defaultConfig.versionName
}
正如下面的评论和另一个答案所提到的,这里的原始答案不适用于Gradle 3+。根据文档,下面的内容应该可以工作:
使用Variant API来操作变量输出与新插件。它仍然适用于简单的任务,例如更改APK构建时的名称,如下所示:
// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${variant.name}-${variant.versionName}.apk"
}
}
老答:
我无法获得archivesBaseName &Android Studio 0.8.13/Gradle 2.1虽然我可以在defaultConfig中设置archivesBaseName和version,但它似乎不会影响输出名称。最后,将以下libraryVariants
块添加到我的android{}范围最终为我工作:
libraryVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.aar')) {
def fileName = "${archivesBaseName}-${version}.aar"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
对于Android Studio 3与Gradle 4和Android Plugin For Gradle 3.0.0你必须改变答案qix如下:
android {
...
libraryVariants.all { variant ->
variant.outputs.all { output ->
if (outputFile != null && outputFileName.endsWith('.aar')) {
outputFileName = "${archivesBaseName}-${version}.aar"
}
}
}
}
在我的情况下,${version}的结果是"unspecified",最后我找到了${defaultConfig。versionName}。
android {
...
libraryVariants.all { variant ->
variant.outputs.all {
outputFileName = "${variant.name}-${defaultConfig.versionName}.aar"
}
}
}
在build-plugin 1.5.0中,现在可以在defaultConfig
对于最新版本的Gradle 5+,以下是@frouo的答案:
defaultConfig {
...
versionName "some-version-name-or-number"
setProperty("archivesBaseName", "${archivesBaseName}-$versionName")
...
}
AAR扩展将自动添加
除了qix回答这里的信息,您可以通过此方法添加多个输出路径,也可以通过常规字符串:
libraryVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.aar')) {
def fileName = "${archivesBaseName}-${version}.aar"
output.outputFile = new File(outputFile.parent, fileName)
output.outputFile = new File("/home/pepperonas/IdeaProjects/Libraries/Base/testapp/libs", fileName)
}
}
}
(支持属于qix -我只是写这个作为一个答案,因为可读性)。
对于Gradle 5+:
android.libraryVariants.all { variant ->
variant.variantData.outputFactory.output.apkDatas.each { apkData ->
apkData.outputFileName = "YourNewFileName.aar"
}
}
对于Gradle 4+:
android.libraryVariants.all { variant ->
variant.outputs.each { output ->
output.outputFileName = "YourNewFileName.aar"
}
}
对于Gradle 2+和Gradle 3+:
android.libraryVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(file.parent, "YourNewFileName.aar")
}
}
使用Gradle 6+和agp4 +,另一个允许完全控制名称的答案是:
afterEvaluate {
android.libraryVariants.all { variant ->
variant.variantData.outputFactory.apkDataList.each { apkData ->
if (apkData.outputFileName.endsWith('.aar')) {
apkData.outputFileName = "${project.name}-${buildType.name}-anything-you-want.aar"
}
}
}
}