# OutOperationRequest

# OutOperationRequest

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

<br />

```
interface OutOperationRequest<FileTypeT : FileSystemLocation>
```

<br />

*** ** * ** ***

Operations performed by a[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)with a single[RegularFile](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFile.html)or[Directory](https://docs.gradle.org/current/javadoc/org/gradle/api/file/Directory.html)output.

[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)is not consuming existing version of the target[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/SingleArtifact).

## Summary

|                             ### Public functions                             |
|------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | `<ArtifactTypeT : `[Artifact.Multiple](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Multiple)`<FileTypeT> & `[Artifact.Appendable](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Appendable)`> `[toAppendTo](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/OutOperationRequest#toAppendTo(com.android.build.api.artifact.Artifact.Multiple))`(` ` type: ArtifactTypeT` `)` Initiates an append request to a[Artifact.Multiple](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Multiple)artifact type.                                                                                                                                                                                                                                                                                                                |
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | `<ArtifactTypeT : `[Artifact.Single](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Single)`<FileTypeT> & `[Artifact.Replaceable](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Replaceable)`> `[toCreate](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/OutOperationRequest#toCreate(com.android.build.api.artifact.Artifact.Single))`(` ` type: ArtifactTypeT` `)` Initiates a creation request for a single[Artifact.Replaceable](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Replaceable)artifact type.                                                                                                                                                                                                                                                                                                         |
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | `@`[Incubating](https://docs.gradle.org/current/javadoc/org/gradle/api/Incubating.html) `<ArtifactTypeT : `[Artifact.Single](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Single)`<FileTypeT>> `[toListenTo](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/OutOperationRequest#toListenTo(com.android.build.api.artifact.Artifact.Single))`(` ` type: ArtifactTypeT` `)` Initiates a reactive request where the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)used in the[Artifacts.use](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifacts#use(org.gradle.api.tasks.TaskProvider))method will be executed once the final version of the[type](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/OutOperationRequest#toListenTo(com.android.build.api.artifact.Artifact.Single))artifact has been produced. |

## Public functions

### toAppendTo

Added in 7.0.0  

```
fun <ArtifactTypeT : Artifact.Multiple<FileTypeT> & Artifact.Appendable> toAppendTo(
    type: ArtifactTypeT
): Unit
```

Initiates an append request to a[Artifact.Multiple](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Multiple)artifact type.  

|      Parameters       |
|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `type: ArtifactTypeT` | The[Artifact](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact)of[FileTypeT](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/OutOperationRequest)identifying the artifact to append to. The artifact type must be[Artifact.Multiple](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Multiple)and[Artifact.Appendable](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Appendable). As an example, let's take a[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)that outputs a[org.gradle.api.file.RegularFile](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFile.html): ```scalate-server-page abstract class MyTask: DefaultTask() { @get:OutputFile abstract val outputFile: RegularFileProperty @TaskAction fun taskAction() { ... outputFile.get().asFile.write( ... ) ... } } ``` and an ArtifactType defined as follows : ```scalate-server-page sealed class ArtifactType<T: FileSystemLocation>( val kind: ArtifactKind ): MultipleArtifactType { object MULTIPLE_FILE_ARTIFACT: ArtifactType<RegularFile>(FILE), Appendable } ``` You can then register the above task as a Provider of[org.gradle.api.file.RegularFile](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFile.html)for that artifact type: ```verilog val taskProvider= projects.tasks.register(MyTask::class.java, "appendTask") artifacts.use(taskProvider) .wiredWith(MyTask::outputFile) .toAppendTo(ArtifactType.MULTIPLE_FILE_ARTIFACT) ``` |

### toCreate

Added in 7.0.0  

```
fun <ArtifactTypeT : Artifact.Single<FileTypeT> & Artifact.Replaceable> toCreate(
    type: ArtifactTypeT
): Unit
```

Initiates a creation request for a single[Artifact.Replaceable](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Replaceable)artifact type.  

|      Parameters       |
|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `type: ArtifactTypeT` | The[Artifact](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact)of[FileTypeT](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/OutOperationRequest)identifying the artifact to replace. The artifact type must be[Artifact.Replaceable](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Replaceable) A creation request does not care about the existing producer, since it replaces the existing producer. Therefore, the existing producer task will not execute (unless it produces other outputs). Please note that when such replace requests are made, the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)will replace initial AGP providers. You cannot replace the[Artifact.Multiple](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Multiple)artifact type; therefore, you must instead combine it using the[TaskBasedOperation.wiredWith](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/TaskBasedOperation#wiredWith(kotlin.Function1))API. For example, let's take a[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)that outputs a[org.gradle.api.file.RegularFile](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFile.html): ```scalate-server-page abstract class MyTask: DefaultTask() { @get:OutputFile abstract val outputFile: RegularFileProperty @TaskAction fun taskAction() { ... write outputFile ... } } ``` An[SingleArtifact](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/SingleArtifact)is defined as follows: ```scalate-server-page sealed class ArtifactType<T: FileSystemLocation>(val kind: ArtifactKind) { object SINGLE_FILE_ARTIFACT: ArtifactType<RegularFile>(FILE), Replaceable } ``` You can register a transform to the collection of[org.gradle.api.file.RegularFile](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFile.html): ```verilog val taskProvider= projects.tasks.register(MyTask::class.java, "replaceTask") artifacts.use(taskProvider) .wiredWith(MyTask::outputFile) .toCreate(ArtifactType.SINGLE_FILE_ARTIFACT) ``` |

### toListenTo

Added in 8.3.2  

```
@Incubating
fun <ArtifactTypeT : Artifact.Single<FileTypeT>> toListenTo(
    type: ArtifactTypeT
): Unit
```

Initiates a reactive request where the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)used in the[Artifacts.use](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifacts#use(org.gradle.api.tasks.TaskProvider))method will be executed once the final version of the[type](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/OutOperationRequest#toListenTo(com.android.build.api.artifact.Artifact.Single))artifact has been produced.

The final version artifact will be injected in the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html).

Remember that an artifact is not always produced, for instance, an artifact related to minification will not be produced unless minification is turned on.

When an artifact is not produced in the current build flow, the[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)will NOT be invoked.

For example, let's take a[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)that wants to listen to the merged manifest file production :  

````scalate-server-page
        abstract class MyTask: DefaultTask() {
             @get:InputFile abstract val mergedManifestFile: RegularFileProperty

             @TaskAction fun taskAction() {
                 ... verify that manifest is correct ...
             }
        }

    You can register a transform to the collection of [org.gradle.api.file.RegularFile]:

    ```kotlin
        val taskProvider= projects.tasks.register(MyTask::class.java, "verifyManifestTask")
        artifacts.use(taskProvider)
         .wiredWith(MyTask::mergedManifestFile)
         .toListenTo(SingleArtifact.MERGED_MANIFEST)
````

[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)will be registered as a finalizer task for the final producer of the[type](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/OutOperationRequest#toListenTo(com.android.build.api.artifact.Artifact.Single))artifact using Gradle's[Task.finalizedBy](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html#finalizedBy-kotlin.Array[kotlin.Any]-)API.  

|      Parameters       |
|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| `type: ArtifactTypeT` | the[Artifact.Single](https://developer.android.com/reference/tools/gradle-api/8.3/com/android/build/api/artifact/Artifact.Single)artifact identifier. |