API ‘variant.getAssemble()‘ is obsolete and has been replaced with ‘variant.getAssembleProvider()‘

2023-04-27 15:04:53 浏览数 (1)

Warning 日志

最近在做Android工程的架构升级,每次同步工程()都会报下面的告警信息:

  • API ‘variant.getAssemble()’ is obsolete and has been replaced with ‘variant.getAssembleProvider()’
  • 警告:'variant.getJavaCompile()‘接口已过时,请替换为’variant.getJavaCompileProvider()’
  • Android Studio 更新后:获取 API ‘variant.getAssemble()’ 已过时,已替换为 ‘variant.getAssembleProvider()’

查了一下资料,有部分让降级 Gradle 版本的,还有关闭告警信息的,但考虑到以后的升级,还是适配一下比较稳妥,我们不应该把风险转嫁给未来。

原因

告警信息其实已经非常明确了,variantgetAssemble() 方法已启用,Gradle 官方希望我们使用它的替代方法 getAssembleProvider()

至于如何查找使用 getAssemble() 方法的地方,需要全局搜索一下:

  1. getAssemble
  2. assemble

通常大家使用到此方法的地方是应用 module 内的 build.gradle 里:

代码语言:javascript复制
android {
	variant.outputs.all { output ->
        variant.assemble.doLast {
            //....
        }
    }
}

可以看到 variant.assemble,不是告警信息里的 variant.getAssemble() ,这是 Gradle 使用的 Groovy 语言的特性造成的。

解决方案

假设旧的使用方式是:

代码语言:javascript复制
variant.outputs.all { output ->
        variant.assemble.doLast {
            //....
        }
    }
}

把上述代码替换为(内含 2 种修改方法):

代码语言:javascript复制
variant.outputs.all { output ->
    variant.getAssembleProvider().configure() {
        it.doLast { 
            //....
        }
    }
}
//或者
variant.outputs.all { output ->
        variant.assembleProvider.get().doLast {
            //....
        }
    }
}

根据自己的喜欢,可以选择上述修改方法之一。


0 人点赞