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

时间:2014-07-14 01:53:17

标签: android gradle android-library

我有一个包含多个模块的项目,其中一个是名为(差)的Android库sdk。当我构建项目时,它会输出一个名为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
}

7 个答案:

答案 0 :(得分:82)

正如下面的评论和另一个答案所述,这里的原始答案不适用于Gradle 3+。根据{{​​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"
    }
}

OLD ANSWER:

我无法获得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)
        }
    }
}

答案 1 :(得分:20)

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

android {
...    

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

答案 2 :(得分:11)

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

答案 3 :(得分: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)
            }
        }
    }

(Upvotes属于qix - 我只是因为可读性而把它写成答案)。

答案 4 :(得分:7)

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

defaultConfig {
    ...
    setProperty("archivesBaseName", "${archivesBaseName}-$versionName")
    ...
}

AAR扩展名将自动添加。

答案 5 :(得分:6)

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

    cordova build android exited with exit code 1.

    Re-running this command with the --verbose flag may provide

答案 6 :(得分:1)

使用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"
            }
        }
    }
}
相关问题