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

Aff*_*ian 51 android gradle android-library

我有一个项目,里面有几个模块,其中一个是名为(很差)的Android库sdk.当我构建项目时,它输出一个名为的AAR sdk.aar.

我无法在Android或Gradle文档中找到允许我更改AAR输出名称的任何内容.我希望它有一个基本名称+版本号,就像Jar任务一样,但我无法弄清楚如何为AAR做同样的事情,因为它的所有配置似乎都隐藏在android.library插件中.

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

如何更改com.android.libraryGradle中生成的AAR的名称?

Gradle解决方案

defaultConfig {
    minSdkVersion 9
    targetSdkVersion 19
    versionCode 4
    versionName '1.3'
    testFunctionalTest true
    project.archivesBaseName = "Project name"
    project.version = android.defaultConfig.versionName
}
Run Code Online (Sandbox Code Playgroud)

qix*_*qix 83

正如下面的评论和另一个答案所述,这里的原始答案不适用于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"
    }
}
Run Code Online (Sandbox Code Playgroud)

老答案:

我无法使用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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Helmisek尝试使用`android.libraryVariants`代替 (4认同)
  • 对我不起作用,因为它说不存在像libraryVariants这样的属性 (2认同)
  • 不再适用于Gradle 4.1:https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#variant_output (2认同)

dev*_*evz 21

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

android {
...    

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


lig*_*igi 12

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

  • 这对我有用:`setProperty("archivesBaseName","$ {archivesBaseName} - $ versionName")```build:gradle:1.5.0`,添加到`defaultConfig {}`块 (8认同)

Spe*_*o83 11

对于最新版本的 Gradle 5+,这是@frouo 回答后的最佳回答:

defaultConfig {
    ...
    versionName "some-version-name-or-number"
    setProperty("archivesBaseName", "${archivesBaseName}-$versionName")
    ...
}
Run Code Online (Sandbox Code Playgroud)

AAR 扩展将自动添加。

  • 谢谢你!这就是我 gradle 6 所需要的 (2认同)

Mar*_*fer 10

除了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)
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

(Upvotes属于qix - 我只是因为可读性而将其写为答案).


小智 8

在我的情况下,$ {version}导致“未指定”,最后我发现$ {defaultConfig.versionName}有效。

android {
    ...
    libraryVariants.all { variant ->
        variant.outputs.all {
            outputFileName = "${variant.name}-${defaultConfig.versionName}.aar"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)