如何设置Gradle的AAR输出的名称

我有一个项目中有几个模块,其中之一是一个名为(很差)的sdk的Android库。 当我build立项目时,它输出一个名为sdk.aar的AAR。

我在Android或Gradle文档中找不到任何可以更改AAR输出名称的东西。 我希望它有一个像Jar任务一样的basename +版本号,但是我不能解决如何对AAR执行相同的操作,因为它的所有configuration似乎都隐藏在android.library插件中。

在这个阶段重命名模块不是一个选项,但仍不会将版本号添加到最终的AAR。

我如何更改由Gradle中的com.android.library生成的AAR的名称?

Gradle解决scheme

 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来操作变体输出会被新的插件破坏。 它仍然适用于简单的任务,例如在构build时更改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&版本为我工作w / Android Studio 0.8.13 / Gradle 2.1 。 虽然我可以在我的defaultConfig中设置archivesBaseName和版本,但似乎不影响输出名称。 最后,将下面的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) } } } 

使用build-plugin 1.5.0,现在可以在defaultConfig中使用archivesBaseName

除了qix之外,在这里还可以用这个方法通过常规string添加多个输出path的信息:

 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) } } } 

(Upvotes属于qix – 由于可读性,我只是把它写成了答案)。

对于使用Gradle 4的Android Studio 3和Gradle 3.0.0的Android插件,您必须将qix的答案更改为以下内容:

 libraryVariants.all { variant -> variant.outputs.all { output -> if (outputFile != null && outputFileName.endsWith('.aar')) { outputFileName = "${archivesBaseName}-${version}.aar" } } }