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



我有一个项目,其中有几个模块,其中一个是安卓库命名(差)为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

中使用archivesBaseName

对于最新版本的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"
            }
        }
    }
}

最新更新