# TaskBasedOperation

# TaskBasedOperation

[View Source](https://cs.android.com/search?q=file:com/android/build/api/artifact/TaskBasedOperation.kt+class:com.android.build.api.artifact.TaskBasedOperation)  
Added in 4.2.0  

<br />

```
interface TaskBasedOperation<TaskT : Task>
```

<br />

*** ** * ** ***

Interface with methods to wire input and output method references to[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)-based operations.

A[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)-based operation will create, transform, or append files or directories to public[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)to customize or participate in the build flow.

Each operation should indicate through the methods of this interface which method can be used to set or retrieve the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)inputs and outputs.

## Summary

|                                                                                    ### Public functions                                                                                     |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/OutOperationRequest)`<FileTypeT>`                                         | `<FileTypeT : `[FileSystemLocation](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocation.html)`> `[wiredWith](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1))`(` ` taskOutput: (TaskT) `->` `[FileSystemLocationProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocationProperty.html)`<FileTypeT>` `)` Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)output method reference so the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)result can be retrieved after successful task execution.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| [CombiningOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/CombiningOperationRequest)`<FileTypeT>`                             | `<FileTypeT : `[FileSystemLocation](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocation.html)`> `[wiredWith](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,kotlin.Function1))`(` ` taskInput: (TaskT) `->` `[ListProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/ListProperty.html)`<FileTypeT>,` ` taskOutput: (TaskT) `->` `[FileSystemLocationProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocationProperty.html)`<FileTypeT>` `)` Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current versions of a[Artifact.Multiple](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,kotlin.Function1))while producing a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,kotlin.Function1))method after successful execution. |
| [InAndOutDirectoryOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/InAndOutDirectoryOperationRequest)`<TaskT>`                 | [wiredWithDirectories](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,kotlin.Function1))`(` ` taskInput: (TaskT) `->` `[DirectoryProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/DirectoryProperty.html)`,` ` taskOutput: (TaskT) `->` `[DirectoryProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/DirectoryProperty.html) `)` Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current version of the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,kotlin.Function1)).                                                                                                                                                                                                                                                                                                                                                                                                                   |
| [InAndOutFileOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/InAndOutFileOperationRequest)                                    | [wiredWithFiles](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithFiles(kotlin.Function1,kotlin.Function1))`(` ` taskInput: (TaskT) `->` `[RegularFileProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFileProperty.html)`,` ` taskOutput: (TaskT) `->` `[RegularFileProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFileProperty.html) `)` Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current version of the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithFiles(kotlin.Function1,kotlin.Function1)).                                                                                                                                                                                                                                                                                                                                                                                                                             |
| [MultipleArtifactTypeOutOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/MultipleArtifactTypeOutOperationRequest)`<FileTypeT>` | `<FileTypeT : `[FileSystemLocation](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocation.html)`> `[wiredWithMultiple](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithMultiple(kotlin.Function1))`(` ` taskInput: (TaskT) `->` `[ListProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/ListProperty.html)`<FileTypeT>` `)` Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)input method reference so the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)can be retrieve the current version of the target[MultipleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/MultipleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithMultiple(kotlin.Function1)).                                                                                                                                                                                                                                                                                                                                                                                                                         |

## Public functions

### wiredWith

Added in 4.2.0  

```
fun <FileTypeT : FileSystemLocation> wiredWith(
    taskOutput: (TaskT) -> FileSystemLocationProperty<FileTypeT>
): OutOperationRequest<FileTypeT>
```

Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)output method reference so the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)result can be retrieved after successful task execution.

This method is useful when creating a new version, when appending to existing artifacts, or when access to the current version of an artifact isn't required.  

|                                                                            Parameters                                                                             |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|
| `taskOutput: (TaskT) `->` `[FileSystemLocationProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocationProperty.html)`<FileTypeT>` | The method reference to retrieve the task output after successful task execution. |

|                                                                       Returns                                                                       |
|-----------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/OutOperationRequest)`<FileTypeT>` | The[OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/OutOperationRequest)to set the desired operation type and[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)on which the operation applies. |

### wiredWith

Added in 4.2.0  

```
fun <FileTypeT : FileSystemLocation> wiredWith(
    taskInput: (TaskT) -> ListProperty<FileTypeT>,
    taskOutput: (TaskT) -> FileSystemLocationProperty<FileTypeT>
): CombiningOperationRequest<FileTypeT>
```

Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current versions of a[Artifact.Multiple](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,kotlin.Function1))while producing a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,kotlin.Function1))method after successful execution.

This method is useful when[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)is combining all elements of an[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)into a single element.  

|                                                                            Parameters                                                                             |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `taskInput: (TaskT) `->` `[ListProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/ListProperty.html)`<FileTypeT>`                          | The method reference the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)will use to retrieve the current artifact versions during[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)execution (and only then). |
| `taskOutput: (TaskT) `->` `[FileSystemLocationProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/FileSystemLocationProperty.html)`<FileTypeT>` | The method reference to retrieve the task output after successful task execution.                                                                                                                                                                                                                                                                         |

|                                                                             Returns                                                                             |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [CombiningOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/CombiningOperationRequest)`<FileTypeT>` | The[CombiningOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/CombiningOperationRequest)to set the desired operation type and[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)as well as the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact). |

### wiredWithDirectories

```
fun wiredWithDirectories(
    taskInput: (TaskT) -> DirectoryProperty,
    taskOutput: (TaskT) -> DirectoryProperty
): InAndOutDirectoryOperationRequest<TaskT>
```

Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current version of the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,kotlin.Function1)).[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)will also produce a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,kotlin.Function1))method after successful execution.

This method is useful when[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)is transforming an[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)from its current version to a new one and the[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)'s[Artifact.kind](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/Artifact#kind())is[Artifact.DIRECTORY](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/Artifact#DIRECTORY())  

|                                                             Parameters                                                             |
|------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `taskInput: (TaskT) `->` `[DirectoryProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/DirectoryProperty.html)  | The method reference the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)will use to retrieve the current artifact version during[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)execution (and only then). |
| `taskOutput: (TaskT) `->` `[DirectoryProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/DirectoryProperty.html) | The method reference to retrieve the task output after successful task execution.                                                                                                                                                                                                                                                                        |

|                                                                                   Returns                                                                                   |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [InAndOutDirectoryOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/InAndOutDirectoryOperationRequest)`<TaskT>` | The[InAndOutDirectoryOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/InAndOutDirectoryOperationRequest)to set the desired operation type as well as the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact). |

### wiredWithFiles

```
fun wiredWithFiles(
    taskInput: (TaskT) -> RegularFileProperty,
    taskOutput: (TaskT) -> RegularFileProperty
): InAndOutFileOperationRequest
```

Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)input and output methods references so the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)can retrieve the current version of the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithFiles(kotlin.Function1,kotlin.Function1)).[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)will also produce a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithFiles(kotlin.Function1,kotlin.Function1))method after successful execution.

This method is useful when[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)is transforming an[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)from its current version to a new one and the[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)'s[Artifact.kind](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/Artifact#kind())is[Artifact.FILE](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/Artifact#FILE())  

|                                                               Parameters                                                               |
|----------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `taskInput: (TaskT) `->` `[RegularFileProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFileProperty.html)  | The method reference the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)will use to retrieve the current artifact version during[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)execution (and only then). |
| `taskOutput: (TaskT) `->` `[RegularFileProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFileProperty.html) | The method reference to retrieve the task output after successful task execution.                                                                                                                                                                                                                                                                        |

|                                                                         Returns                                                                          |
|----------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [InAndOutFileOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/InAndOutFileOperationRequest) | The[OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/OutOperationRequest)to set the desired operation type and[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact)as well as the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/SingleArtifact). |

### wiredWithMultiple

Added in 8.3.1  

```
fun <FileTypeT : FileSystemLocation> wiredWithMultiple(
    taskInput: (TaskT) -> ListProperty<FileTypeT>
): MultipleArtifactTypeOutOperationRequest<FileTypeT>
```

Sets the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)input method reference so the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)can be retrieve the current version of the target[MultipleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/MultipleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation#wiredWithMultiple(kotlin.Function1)).  

|                                                                Parameters                                                                |
|------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `taskInput: (TaskT) `->` `[ListProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/ListProperty.html)`<FileTypeT>` | The method reference the[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)will use to retrieve the current artifact version during[TaskT](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/TaskBasedOperation)execution (and only then). |

|                                                                                           Returns                                                                                           |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [MultipleArtifactTypeOutOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/MultipleArtifactTypeOutOperationRequest)`<FileTypeT>` | the[MultipleArtifactTypeOutOperationRequest](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/MultipleArtifactTypeOutOperationRequest)to set the desired operation type and the target[MultipleArtifact](https://developer.android.com/reference/tools/gradle-api/8.8/com/android/build/api/artifact/MultipleArtifact) |