Подтвердить что ты не робот

Как установить имя выхода AAR из Gradle

У меня есть проект с несколькими модулями в нем, одна из которых - это Android-библиотека, названная (плохо), как sdk. Когда я создаю проект, он выдает AAR с именем sdk.aar.

Мне не удалось найти что-либо в документации Android или Gradle, которая позволяет мне изменить имя выхода AAR. Я бы хотел, чтобы у него было имя базы + номер версии, например, задачи Jar, но я не могу понять, как сделать то же самое для AAR, потому что все настройки для него, похоже, скрыты в плагине android.library.

Переименование модуля на данном этапе не является опцией, и это все равно не добавит номер версии в окончательный AAR.

Как я могу изменить имя AAR, сгенерированное com.android.library в Gradle?

Gradle решение

defaultConfig {
    minSdkVersion 9
    targetSdkVersion 19
    versionCode 4
    versionName '1.3'
    testFunctionalTest true
    project.archivesBaseName = "Project name"
    project.version = android.defaultConfig.versionName
}
4b9b3361

Ответ 1

Как уже упоминалось в комментариях ниже и другом ответе, исходный ответ здесь не работает с Gradle 3+. В docs должно работать следующее:

Использование API-интерфейса Variant для управления вариантами вывода разбивается на новый плагин. Он по-прежнему работает для простых задач, таких как изменение APK имя во время сборки, как показано ниже:

// If you use each() to iterate through the variant objects,
// you need to start using all(). That 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. Хотя я могу установить archivesBaseName и версию в свой defaultConfig, это, похоже, не влияет на имя вывода. В итоге добавление следующего блока libraryVariants к моей области андроида {} наконец-то сработало для меня:

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

Ответ 2

с помощью build-plugin 1.5.0 теперь можно использовать archivesBaseName в defaultConfig

Ответ 3

В дополнение к 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

Для Android Studio 3 с Gradle 4 и Android Plugin для Gradle 3.0.0 вы должны изменить ответ qix к следующему:

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