# ApkOutputProviders

# 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  

<br />

```
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[org.gradle.api.Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)that needs all the Apks for local deployment:  

```scalate-server-page
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                             |
|------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | `<TaskT : `[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)`> `[provideApkOutputToTask](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/ApkOutputProviders#provideApkOutputToTask(org.gradle.api.tasks.TaskProvider,kotlin.Function1,com.android.build.api.variant.DeviceSpec))`(` ` taskProvider: `[TaskProvider](https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskProvider.html)`<TaskT>,` ` taskInput: (TaskT) `->` `[Property](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/Property.html)`<`[ApkOutput](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/ApkOutput)`>,` ` deviceSpec: `[DeviceSpec](https://developer.android.com/reference/tools/gradle-api/9.0/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: `[TaskProvider](https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskProvider.html)`<TaskT>`                                                                                                                    | the[TaskProvider](https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskProvider.html)returned by Gradle's Task manager when registering the Task of type[TaskT](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/ApkOutputProviders#provideApkOutputToTask(org.gradle.api.tasks.TaskProvider,kotlin.Function1,com.android.build.api.variant.DeviceSpec)). |
| `taskInput: (TaskT) `->` `[Property](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/Property.html)`<`[ApkOutput](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/ApkOutput)`>` | The method reference the[TaskT](https://developer.android.com/reference/tools/gradle-api/9.0/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: `[DeviceSpec](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/DeviceSpec)                                                                                                          | the device specification                                                                                                                                                                                                                                                                                                                                                                                        |