Gradle如何用``variant.getPackageLibraryProvider()''替换过时的``variantOutput.getPackageLibrary()''?

时间:2019-03-06 15:50:38

标签: android android-gradle build.gradle

我有一个具有多种功能的Android库项目。我使用'maven-publish'插件将这些不同口味的aar文件上传到私有存储库。我一直在使用variant.outputs[0].outputFile作为publishing.publications.artifact参数的值。

publishing.publications.create variant.flavorName, MavenPublication, {
            groupId "$libraryGroupId.$variant.flavorName"
            artifactId libraryArtifactId
            version libraryVersion
            artifact variant.outputs[0].outputFile           
        }

运行良好,但是我最近将库的gradle插件更新为com.android.tools.build:gradle:3.3.2,并收到以下警告:

  

警告:API'variantOutput.getPackageLibrary()'已过时,已被'variant.getPackageLibraryProvider()'取代。   它将在2019年底删除。   有关更多信息,请参见https://d.android.com/r/tools/task-configuration-avoidance。   要确定调用variantOutput.getPackageLibrary()的内容,请在命令行上使用-Pandroid.debug.obsoleteApi = true来显示堆栈跟踪。

这本身不是问题,因为它仍然有效,但是我不喜欢这个警告,并且由于我一直在清理build.gradle中的内容,因此我想尝试修复它。

我尝试了很多不同的组合,在互联网上搜索以查找有关如何从包库提供程序获取aar的信息。关于这个主题几乎没有可用的东西(这确实令人沮丧),但是我确实发现this post促使我尝试使用:

variant.getPackageLibraryProvider().get()

这提供了一个com.android.build.gradle.tasks.BundleAar,当设置为发布的工件(artifact variant.getPackageLibraryProvider().get()时似乎可以正常工作,并且可以修复警告。

这是解决此警告的正确方法,还是由于某些原因对我适得其反?有谁知道我在哪里可以获得更多有关此的信息?

1 个答案:

答案 0 :(得分:0)

使用GradleAndroid Gradle Plugin来源作为参考,我想到了以下内容,但警告已消失:

publishing {
    publications {
        android.libraryVariants.all { variant ->
            if (variant.buildType.name == "release") {
                aar(MavenPublication) {
                    artifact(variant.packageLibraryProvider.get().archivePath)
                    groupId = '<your group id>'
                    artifactId = "$project.name"
                }
            }
        }
    }
    ...
}