Android Gradle Plugin 8.0 不会自动为 Maven 发布创建软件组件

Mar*_*ler 29 android gradle android-gradle-plugin maven-publish android-gradle-7.0

使用 Gradle7.2和这些插件:

plugins {
    id 'com.android.library' // Android Gradle Plugin 7.1.2
    id 'maven-publish'
}
Run Code Online (Sandbox Code Playgroud)

它仍然有效,但给了我这个弃用警告:

警告:不会自动为 Android Gradle Plugin 8.0 的 Maven 发布创建软件组件。要选择未来的行为,请在文件android.disableAutomaticComponentCreation=true中设置 Gradle 属性gradle.properties或使用新的发布 DSL。

发行说明也提到了它,但这些引用的是过时的文档:

从 AGP 8.0 开始,默认情况下将禁用自动组件创建。目前,AGP 7.1 自动为每个构建变体创建一个与构建变体同名的组件,以及一个包含所有构建变体的 all 组件。此自动组件创建将被禁用。要转换到新行为,您应该通过设置为 来手动禁用自动组件android.disableAutomaticComponentCreation创建true
有关更多信息,请参阅使用 Maven 发布插件


但是在文件中启用 AGP 8.0 默认行为预览时gradle.properties

android.disableAutomaticComponentCreation=true
Run Code Online (Sandbox Code Playgroud)

它找不到属性components.release

FAILURE: Build failed with an exception.

* Where:
Script 'publish.gradle' line: 53

* What went wrong:
A problem occurred configuring project ':library'.
> Could not get unknown property 'release' for SoftwareComponentInternal set of type org.gradle.api.internal.component.DefaultSoftwareComponentContainer.
Run Code Online (Sandbox Code Playgroud)

违规如下:

release(MavenPublication) {
    from components.release
}
Run Code Online (Sandbox Code Playgroud)

该变体仍然存在,但它不再创建组件:

androidComponents {
    onVariants(selector().all(), {
        println "$it.name"
    })
}
Run Code Online (Sandbox Code Playgroud)

如何升级到这个“新的发布 DSL”并创建要发布的软件组件

Mar*_*ler 39

根据PublishingOptions,必须定义一个android.publishing块:

android {
    publishing {
        singleVariant('release') {
            withSourcesJar()
            withJavadocJar()
        }
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

要一次定义多个变体:

android {
    publishing {
        multipleVariants {
            withSourcesJar()
            withJavadocJar()
            allVariants()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后例如。components.getByName('release')将会再次被知晓。