这是一个警告,它不会对您的构建产生负面影响。您可以继续更新到 AGP 3.3.0。
新的 Android Gradle 插件开始利用惰性配置(任务配置避免 API 和提供程序 API),如果使用得当,可以通过仅评估所需的任务和属性来提高构建速度。 AGP 的使用者需要使用更新后的 API(例如 getAssembleProvider().configure() 而不是 getAssemble()),否则任务和属性总是会被评估。
惰性 API 的要点:不要配置不会在特定构建中运行的任务。
阅读更多:
做什么
如果它不是来自您的代码,那么您除了等待更新的库之外别无他法(并祈祷他们做对了)。
如果它来自您的代码,这里是一个迁移示例:我正在使用 Jake Wharton 的这段代码为我的库模块禁用 BuildConfig.java 生成。
libraryVariants.all {
it.generateBuildConfig.enabled = false
}
使用新的惰性 API,它看起来像这样。
libraryVariants.all {
it.generateBuildConfigProvider.configure {
it.enabled = false
}
}
Eager API 会导致配置 generateBuildConfig 任务,即使我不需要它,例如运行 clean。惰性 API 仅在它是要运行的任务图的一部分时配置任务。这样可以节省配置阶段的时间。
如何判断它是否来自您的代码?把这个放在你的gradle.properties
android.debug.obsoleteApi=true
现在运行构建并检查堆栈跟踪的输出。
完全错误
为了完整起见,下面是一个由带有 AGP 3.3.0 的 Fabric 插件 1.27.0 引起的完整错误消息的示例:
WARNING: API 'variant.getExternalNativeBuildTasks()' is obsolete and has been replaced with 'variant.getExternalNativeBuildProviders()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variant.getExternalNativeBuildTasks(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace.
不好的例子
以下是 Facebook React 如何处理其插件中的 API 迁移的差异:https://github.com/facebook/react-native/pull/23103/files
换句话说,他们没有。 taskProvider.get() 等于 task - 两种用途都很迫切。任务总是被配置的。
这种方法唯一能实现的就是删除警告
- 消费者不知道他们没有从惰性 API 中获得任何好处,
- 插件作者不再被提醒他们使用错误。
Task Configuration Avoidance API docs 包含一个迁移指南和一个有用的表格,描述了如何懒惰地创建和链接任务。如果您是插件作者,请阅读。