# TaskBasedOperation

# TaskBasedOperation

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

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [com.android.build.api.artifact.TaskBasedOperation](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#) |

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/7.0/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 methods                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ||
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| abstract[OutOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/OutOperationRequest)\<FileTypeT\>                         | [wiredWith](https://developer.android.com/reference/tools/gradle-api/7.0/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 output method reference so the TaskT result can be retrieved after successful task execution.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| abstract[CombiningOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/CombiningOperationRequest)\<FileTypeT\>             | [wiredWith](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1,%20kotlin.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 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/7.0/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#com.android.build.api.artifact.TaskBasedOperation$wiredWith(kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.provider.ListProperty((com.android.build.api.artifact.TaskBasedOperation.wiredWith.FileTypeT)))),%20kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.FileSystemLocationProperty((com.android.build.api.artifact.TaskBasedOperation.wiredWith.FileTypeT)))))/taskInput)while producing a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#com.android.build.api.artifact.TaskBasedOperation$wiredWith(kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.provider.ListProperty((com.android.build.api.artifact.TaskBasedOperation.wiredWith.FileTypeT)))),%20kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.FileSystemLocationProperty((com.android.build.api.artifact.TaskBasedOperation.wiredWith.FileTypeT)))))/taskOutput)method after successful execution. |
| abstract[InAndOutDirectoryOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/InAndOutDirectoryOperationRequest)\<TaskT\> | [wiredWithDirectories](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#wiredWithDirectories(kotlin.Function1,%20kotlin.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 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/7.0/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#com.android.build.api.artifact.TaskBasedOperation$wiredWithDirectories(kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.DirectoryProperty)),%20kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.DirectoryProperty)))/taskInput).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| abstract[InAndOutFileOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/InAndOutFileOperationRequest)                    | [wiredWithFiles](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#wiredWithFiles(kotlin.Function1,%20kotlin.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 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/7.0/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#com.android.build.api.artifact.TaskBasedOperation$wiredWithFiles(kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.RegularFileProperty)),%20kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.RegularFileProperty)))/taskInput).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |

## Public methods

### wiredWith

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

Sets the TaskT output method reference so the TaskT 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. |

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

### wiredWith

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

Sets the TaskT 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/7.0/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#com.android.build.api.artifact.TaskBasedOperation$wiredWith(kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.provider.ListProperty((com.android.build.api.artifact.TaskBasedOperation.wiredWith.FileTypeT)))),%20kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.FileSystemLocationProperty((com.android.build.api.artifact.TaskBasedOperation.wiredWith.FileTypeT)))))/taskInput)while producing a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#com.android.build.api.artifact.TaskBasedOperation$wiredWith(kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.provider.ListProperty((com.android.build.api.artifact.TaskBasedOperation.wiredWith.FileTypeT)))),%20kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.FileSystemLocationProperty((com.android.build.api.artifact.TaskBasedOperation.wiredWith.FileTypeT)))))/taskOutput)method after successful execution.

This method is useful when TaskT is combining all elements of an[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.0/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 will use to retrieve the current artifact versions during TaskT 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.                                         |

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

### wiredWithDirectories

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

Sets the TaskT 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/7.0/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#com.android.build.api.artifact.TaskBasedOperation$wiredWithDirectories(kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.DirectoryProperty)),%20kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.DirectoryProperty)))/taskInput). TaskT will also produce a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#com.android.build.api.artifact.TaskBasedOperation$wiredWithDirectories(kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.DirectoryProperty)),%20kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.DirectoryProperty)))/taskOutput)method after successful execution.

This method is useful when TaskT is transforming an[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.0/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/7.0/com/android/build/api/artifact/SingleArtifact)'s[Artifact.kind](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/Artifact#kind:com.android.build.api.artifact.ArtifactKind)is[Artifact.DIRECTORY](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/Artifact#Companion.DIRECTORY:com.android.build.api.artifact.ArtifactKind.DIRECTORY)

|                                                                                                                       Parameters                                                                                                                       ||
|------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|
| taskInput:(TaskT)-\>[DirectoryProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/DirectoryProperty.html)  | The method reference the TaskT will use to retrieve the current artifact version during TaskT 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.                                        |

| Return ||
|---|---|
| The[InAndOutDirectoryOperationRequest](https://developer.android.com/reference/tools/gradle-api/7.0/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/7.0/com/android/build/api/artifact/SingleArtifact). ||

### wiredWithFiles

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

Sets the TaskT 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/7.0/com/android/build/api/artifact/SingleArtifact)when invoking[taskInput](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#com.android.build.api.artifact.TaskBasedOperation$wiredWithFiles(kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.RegularFileProperty)),%20kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.RegularFileProperty)))/taskInput). TaskT will also produce a new version of the same artifact type accessible through the[taskOutput](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/TaskBasedOperation#com.android.build.api.artifact.TaskBasedOperation$wiredWithFiles(kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.RegularFileProperty)),%20kotlin.Function1((com.android.build.api.artifact.TaskBasedOperation.TaskT,%20org.gradle.api.file.RegularFileProperty)))/taskOutput)method after successful execution.

This method is useful when TaskT is transforming an[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/7.0/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/7.0/com/android/build/api/artifact/SingleArtifact)'s[Artifact.kind](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/Artifact#kind:com.android.build.api.artifact.ArtifactKind)is[Artifact.FILE](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/artifact/Artifact#Companion.FILE:com.android.build.api.artifact.ArtifactKind.FILE)

|                                                                                                                         Parameters                                                                                                                         ||
|----------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|
| taskInput:(TaskT)-\>[RegularFileProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFileProperty.html)  | The method reference the TaskT will use to retrieve the current artifact version during TaskT 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.                                        |

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