如何从 Gradle 设置 AAR 输出的名称
Posted
技术标签:
【中文标题】如何从 Gradle 设置 AAR 输出的名称【英文标题】:How to set name of AAR output from Gradle 【发布时间】:2014-09-03 21:37:02 【问题描述】:我有一个项目,其中有几个模块,其中一个是一个名为(糟糕)为sdk
的 android 库。当我构建项目时,它会输出一个名为 sdk.aar
的 AAR。
我无法在 Android 或 Gradle 文档中找到任何允许我更改 AAR 输出名称的内容。我希望它像 Jar 任务那样有一个基本名称 + 版本号,但我不知道如何为 AAR 做同样的事情,因为它的所有配置似乎都隐藏在 android.library 插件中。
在这个阶段重命名模块不是一个选项,并且仍然不会将版本号添加到最终的 AAR。
如何在 Gradle 中更改 com.android.library
生成的 AAR 的名称?
Gradle 解决方案
defaultConfig
minSdkVersion 9
targetSdkVersion 19
versionCode 4
versionName '1.3'
testFunctionalTest true
project.archivesBaseName = "Project name"
project.version = android.defaultConfig.versionName
【问题讨论】:
【参考方案1】:正如下面的 cmets 和另一个答案中所述,这里的原始答案不适用于 Gradle 3+。根据docs,应该可以使用以下内容:
使用 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"
旧答案:
我无法使用 Android Studio 0.8.13 / Gradle 2.1 获得适合我的 archivesBaseName 和版本。虽然我可以在我的 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)
【讨论】:
对我不起作用,因为它说没有 libraryVariants 这样的属性 @Helmisek 尝试改用android.libraryVariants
对 Gradle 4.1 不再有效:developer.android.com/studio/build/…【参考方案2】:
对于带有 Gradle 4 和 Android Plugin for Gradle 3.0.0 的 Android Studio 3,您必须将 qix 的答案更改为以下内容:
android
...
libraryVariants.all variant ->
variant.outputs.all output ->
if (outputFile != null && outputFileName.endsWith('.aar'))
outputFileName = "$archivesBaseName-$version.aar"
【讨论】:
我们把这个放在哪里? 在你的 app/build.gradle 里面的 android 。或者你可以把它放在你的 app/build.gradle 的最后,但是你必须把它命名为 android.libraryVariants.all 适用于 Android Studio 3.1、Gradle 4.4、Gradle 插件 3.1.0【参考方案3】:就我而言,$version 导致“未指定”,最后我发现 $defaultConfig.versionName 有效。
android
...
libraryVariants.all variant ->
variant.outputs.all
outputFileName = "$variant.name-$defaultConfig.versionName.aar"
【讨论】:
输出文件是“relese-1.0.0.aar”【参考方案4】:使用 build-plugin 1.5.0 现在可以在 defaultConfig 中使用 archivesBaseName
【讨论】:
这对我有用:setProperty("archivesBaseName", "$archivesBaseName-$versionName")
和 build:gradle:1.5.0
,添加到 defaultConfig
块
@frouo 方法适用于最新版本的 Gradle。应该被视为最佳答案!【参考方案5】:
对于最新版本的 Gradle 5+,这是@frouo 答案之后的最佳答案:
defaultConfig
...
versionName "some-version-name-or-number"
setProperty("archivesBaseName", "$archivesBaseName-$versionName")
...
AAR 扩展将自动添加。
【讨论】:
谢谢!这就是我 gradle 6 所需要的 很好。它在 AS4.1.1 gradle 6.1.1 上运行良好 很好。它在 AS 4.1.2 Gradle 6.8.3 上运行良好 这不会阻止附加变体“debug”或“release”(或其他变体)。【参考方案6】:除了 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 版本(即 3+)中不再可能【参考方案7】:使用 Gradle 6+ 和 AGP 4+,允许完全控制名称的替代答案是:
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"
【讨论】:
【参考方案8】:对于 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 设置 AAR 输出的名称的主要内容,如果未能解决你的问题,请参考以下文章