# ApkOutputProviders

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


```
interface ApkOutputProviders
```

<br />

*** ** * ** ***

Provides APIs to obtain ordered collection of APK batches, each intended for local installation, facilitating staged installations.

As an example , let's take a Gradle `https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html` that needs all the Apks for local deployment:

```
abstract class FetchApkTask: DefaultTask() {
  @get:Internal
  abstract val apkOutput: Property<com.android.build.api.variant.ApkOutput>

  @TaskAction
  fun execute() {
    def apkInstallGroups = apkOutput.apkInstallGroups
        for(installGroup: installGroups) {
            installOnDevice(installGroup.apks)
       }
  }
}

val taskProvider: TaskProvider<FetchApkTask> =
    tasks.register("installAppApks", FetchApkTask::class.java)

androidComponents {
   onVariants(selector().withName("debug")) { variant ->
       val appVariant = variant as? ApplicationVariant
       appVariant?.let {
           it.outputProviders.provideApkOutputToTask(
                taskProvider,
                FetchApkTask::getOutput, '
                DeviceSpec("testDevice", 33, "", emptyList(), true)
           )
       }
   }
}
```

## Summary

| ### Public functions |
|---|---|
| `https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html` | `<TaskT : https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html> https://developer.android.com/reference/tools/gradle-api/9.6/com/android/build/api/variant/ApkOutputProviders#provideApkOutputToTask(org.gradle.api.tasks.TaskProvider,kotlin.Function1,com.android.build.api.variant.DeviceSpec)( taskProvider: https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskProvider.html<TaskT>, taskInput: (TaskT) -> https://docs.gradle.org/current/javadoc/org/gradle/api/provider/Property.html<https://developer.android.com/reference/tools/gradle-api/9.6/com/android/build/api/variant/ApkOutput>, deviceSpec: https://developer.android.com/reference/tools/gradle-api/9.6/com/android/build/api/variant/DeviceSpec )` Add Variant's Apk Output for a specific device specification to a Task. |

## Public functions

### provideApkOutputToTask

Added in 8.8.0

```
fun <TaskT : Task> provideApkOutputToTask(
    taskProvider: TaskProvider<TaskT>,
    taskInput: (TaskT) -> Property<ApkOutput>,
    deviceSpec: DeviceSpec
): Unit
```

Add Variant's Apk Output for a specific device specification to a Task. The Apk Output includes an ordered collection of batches of Apks to install on a device that matches the device specification available at the configuration time.

| Parameters |
|---|---|
| `taskProvider: https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskProvider.html<TaskT>` | the `https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskProvider.html` returned by Gradle's Task manager when registering the Task of type `https://developer.android.com/reference/tools/gradle-api/9.6/com/android/build/api/variant/ApkOutputProviders#provideApkOutputToTask(org.gradle.api.tasks.TaskProvider,kotlin.Function1,com.android.build.api.variant.DeviceSpec)`. |
| `taskInput: (TaskT) -> https://docs.gradle.org/current/javadoc/org/gradle/api/provider/Property.html<https://developer.android.com/reference/tools/gradle-api/9.6/com/android/build/api/variant/ApkOutput>` | The method reference the `https://developer.android.com/reference/tools/gradle-api/9.6/com/android/build/api/variant/ApkOutputProviders#provideApkOutputToTask(org.gradle.api.tasks.TaskProvider,kotlin.Function1,com.android.build.api.variant.DeviceSpec)` will use to retrieve the current artifact |
| `deviceSpec: https://developer.android.com/reference/tools/gradle-api/9.6/com/android/build/api/variant/DeviceSpec` | the device specification |