variantOutput.getPackageApplication()已过时

Mar*_*ler 24 gradle build.gradle android-gradle-plugin deprecation-warning build-variant

随着Gradle 4.10.1和Android Gradle插件的更新3.3.0,我得到以下警告:

警告:API' variantOutput.getPackageApplication()'已过时,已替换为' variant.getPackageApplicationProvider()'.

该行,与周围的上下文(由构建变量分配输出文件名):

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()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

迁移指南是不是太有帮助; 虽然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()'.
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ler 12

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

更改output.outputFile.parentvariant.getPackageApplicationProvider().get().outputs.files[1]至少是一个临时解决方法。

资料来源:@Selvin


io.fabric插件引起了variant.getExternalNativeBuildTasks()

下一个版本的io.fabric插件将使用variant.getExternalNativeBuildProviders()

来源:116408637;承诺修复的确认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()'

这篇博客文章介绍了如何com.google.gms.google-services通过添加该插件生成的XML资源来完全摆脱该插件。从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"
    }
}
Run Code Online (Sandbox Code Playgroud)

有关调试信息: ./gradlew -Pandroid.debug.obsoleteApi=true mobile:assembleDebug

这些都不会warnings以任何方式改变行为。

  • 在我的情况下,它是“ dexcount gradle”插件。我将其升级到版本0.8.6之后,警告消失了。 (4认同)

Vla*_*nko 8

将Fabric Gradle插件更新为1.28.1

dependencies {
   classpath 'io.fabric.tools:gradle:1.28.1'
}
Run Code Online (Sandbox Code Playgroud)

变更日志:https : //docs.fabric.io/android/changelog.html#march-15-2019

通过切换到Gradle的任务配置避免API(如果有),消除了过时的API警告。