gradle - variantOutput.getPackageApplication()已过时

标签 gradle android-gradle-plugin build.gradle deprecation-warning build-variant

将Gradle 4.10.1和Android Gradle插件更新为3.3.0,我得到以下警告:

WARNING: API 'variantOutput.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'.



该行以及周围的上下文(通过build变体分配输出文件名):
applicationVariants.all { variant ->
    variant.outputs.all { output ->

        if (variant.getBuildType().getName() in rootProject.archiveBuildTypes) {

            def buildType = variant.getBuildType().getName()
            if (variant.versionName != null) {

                def baseName = output.baseName.toLowerCase()
                String fileName = "${rootProject.name}_${variant.versionName}-${baseName}.apk"

                // this is the line:
                outputFileName = new File(output.outputFile.parent, fileName).getName()
            }
        }
    }
}

migration guide不太有用;尽管variant.outputs.all可能有错-只是不知道要替换什么-迁移指南仅涉及任务而不是构建变体。禁用File → Settings → Experimental → Gradle → Only sync the active variant时,我会收到更多的弃用警告(要点是,这些方法都没有被直接调用):
WARNING: API 'variant.getAssemble()' is obsolete and has been replaced with 'variant.getAssembleProvider()'.
WARNING: API 'variantOutput.getProcessResources()' is obsolete and has been replaced with 'variantOutput.getProcessResourcesProvider()'.
WARNING: API 'variantOutput.getProcessManifest()' is obsolete and has been replaced with 'variantOutput.getProcessManifestProvider()'.
WARNING: API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'.
WARNING: API 'variant.getMergeAssets()' is obsolete and has been replaced with 'variant.getMergeAssetsProvider()'.
WARNING: API 'variant.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'.
WARNING: API 'variant.getExternalNativeBuildTasks()' is obsolete and has been replaced with 'variant.getExternalNativeBuildProviders()'.
WARNING: API 'variantOutput.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'.

问:如何通过迁移到新的API来避免这些过时的警告?

最佳答案

variantOutput.getPackageApplication()由更改的变体API引起。

changing output.outputFile.parent to variant.getPackageApplicationProvider().get().outputs.files[1] is at least a temporary workaround.



来源:@Selvin

variant.getExternalNativeBuildTasks()由io.fabric插件引起。

the next version of the io.fabric plugin will use variant.getExternalNativeBuildProviders().



资料来源:116408637; confirmation用于 promise 的修复(1.28.1)。

这些是由com.google.gms.google-services引起的:
  • registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
  • 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'

  • 这个blog post解释了如何通过添加该插件生成的XML资源来完全摆脱com.google.gms.google-services插件。从build/generated/res/google-services/debug/values/values.xml到常规debug/values/values.xml

    最简单,最省力的方法可能是:
    buildscript {
        repositories {
            google()
            maven { url "https://maven.fabric.io/public" }
        }
        dependencies {
            //noinspection GradleDependency
            classpath "com.android.tools.build:gradle:3.2.1"
            classpath "io.fabric.tools:gradle:1.28.1"
        }
    }
    

    有关调试信息:./gradlew -Pandroid.debug.obsoleteApi=true mobile:assembleDebug
    这些warnings均未以任何方式改变行为。

    关于gradle - variantOutput.getPackageApplication()已过时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54206898/

    相关文章:

    android - Android Studio:Gradle项目同步失败。基本功能将无法正常工作

    gradle - build.gradle 有什么问题?得到 UnsatisfiedLinkError 因为它缺少我的 so 文件

    grails - GVM不在Linux Mint上安装产品

    gradle - 如何持久启用 Gradle 配置缓存功能?

    java - 首次运行时无法构建 Android 项目

    Gradle:仅在任务失败时执行操作

    android - 如何过滤 gradle 中的子模块以应用适当的插件?

    android - 在Android Studio中更新Gradle NDK

    尝试在 Vagrant 中下载依赖项时出现 Gradle 错误

    android - 将签名信息添加到 gradle 中的 apk 文件名