如何复制调试资产以进行单元测试

Kir*_*ill 8 android unit-testing gradle android-library android-gradle-plugin

我有一个android库gradle项目.我需要将一些文件复制到资源文件夹以进行robolectric单元测试.

要做到这一点,我已经定义了一个复制任务:

task copyDebugAssets(type: Copy)  {
    from "${projectDir}/somewhere"
    into "${buildDir}/intermediates/bundles/debug/assets"
}
Run Code Online (Sandbox Code Playgroud)

但我不能将此任务添加为processDebugResources任务的依赖项:

processDebugResources.dependsOn copyDebugAssets
Run Code Online (Sandbox Code Playgroud)

因为这个错误:

无法为com.android.build.gradle.LibraryExtension类型的对象获取未知属性'processDebugResources'.

现在我必须在单元测试之前手动执行此任务:

./gradlew clean copyDebugAssets test
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

RaG*_*aGe 3

Android 插件动态添加几个任务。您的.dependsOn行不起作用,因为当时 gradle 正在尝试处理该行,processDebugResources任务尚可用。您应该告诉 gradle 在上游任务可用时立即添加依赖项:

tasks.whenTaskAdded { task ->
  if (task.name == 'processDebugResources') {
    task.dependsOn copyDebugAssets 
  }
}
Run Code Online (Sandbox Code Playgroud)