ApplicationVariant、BaseVariantOutput 已弃用

A. *_*brg 5 gradle kotlin android-studio build.gradle gradle-kotlin-dsl

我在 Android 应用程序项目的 Kotlin Dsl 文件中使用以下简化配置。

    class ApplicationVariantAction : Action<ApplicationVariant> {
    override fun execute(variant: ApplicationVariant) {
        val fileName = createFileName(variant)
        variant.outputs.all(VariantOutputAction(fileName))
    }

    private fun createFileName(variant: ApplicationVariant): String {
        return "Android" +
                "_${variant.name}" +
                "_${variant.flavorName}" +
                "_${variant.buildType}" +
                "_${variant.versionName}" +
                "_${variant.versionCode}" +
                "_${getDateTimeFormat()}.apk"
    }

    private fun getDateTimeFormat(): String {
        val simpleDateFormat = SimpleDateFormat("yyMdHms", Locale.US)
        return simpleDateFormat.format(Date())
    }

    class VariantOutputAction(
        private val fileName: String
    ) : Action<BaseVariantOutput> {
        override fun execute(output: BaseVariantOutput) {
            if (output is BaseVariantOutputImpl) {
                output.outputFileName = fileName
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但 AS 告诉我 ApplicationVariant 和 BaseVariantOutput 已弃用

如何替换这些已弃用的类?

Ant*_*nit 6

工件中的包中可用的Variant API已被弃用。com.android.build.gradle.apicom.android.tools.build:gradle

这包括BaseVariant其所有直接和间接子类: LibraryVariantApkVariantApplicationVariantFeatureVariantTestVariantUnitTestVariant

新的 Variant API 可在工件com.android.build.api.variant中的包中找到com.android.tools.build:gradle-api

在编写插件时,现在建议仅依赖gradle-api工件,以便仅使用新的接口和类。gradle-api这里的一个小例外是将在 8.0 中移动的插件类:

  • AppPlugin
  • LibraryPlugin
  • DynamicFeaturePlugin
  • TestPlugin

请参阅Android Gradle 插件 DSL/API 迁移时间表以了解迁移详细信息,并参阅 Android Gradle 插件中的新 API以获取有关 API 更改的精彩文章。