Gradle 8.1(Android Studio Giraffe)要求任务之间存在显式或隐式依赖关系。如果我生成的资源将由Android Gradle插件打包,并带有i.e.一些OpenAPI工具,我不明白如何根据Gradle提供的提示来增强Android Gradle插件拥有的现有Gradle任务:
Possible solutions:
1. Declare task ':app:generateOpenApiFooBar' as an input of ':app:packageDebugResources'.
2. Declare an explicit dependency on ':app:generateOpenApiFooBar' from ':app:packageDebugResources' using Task#dependsOn.
3. Declare an explicit dependency on ':app:generateOpenApiFooBar' from ':app:packageDebugResources' using Task#mustRunAfter.
有没有一种方法可以到达现有的'packageDebugResources'任务并添加对我的插件的依赖?类似于以下内容(在我尝试过的任何变体中都不起作用):
tasks.named('packageDebugResources').dependsOn generateOpenApiFooBar
2条答案
按热度按时间a7qyws3x1#
您需要在
afterEvaluate
中执行此操作,或者更好的方法是使用androidComponents
API:这是因为Android Gradle插件会在
afterEvaluate
配置阶段注册所有任务,因此如果您在此阶段之前尝试使用tasks.named
查找任务,则会收到UnknownTaskException
异常。原始警告通常发生在任务错误地生成作为另一任务输入的源时。例如,某些任务直接将输出生成到另一个任务的现有输入目录中。这很糟糕,因为Gradle无法知道它需要在编译任务之前运行您的任务。
相反,他们应该将输出写入自己的目录,然后将此目录添加为源集的源目录。重要的是,不要直接将目录添加到源集中,而是使用附加到任务的属性,以便Gradle知道谁生成了这些文件(
srcDir(myTaskProvider.flatMap { it.outputDirectory })
或类似的东西)。当使用Android时,他们有一个API用于注册源生成任务。你可以这样使用它:
运行
./gradlew assembleDebug
将在build/generated/java/generateInternalDebugBuildConfig/com/example/BuildConfig.kt
中生成以下文件:wlsrxk512#
可以使用project.tasks属性获取对项目中所有任务的引用。然后,您可以使用dependsOn方法在插件任务上添加依赖项。