package artifacts import com.android.build.api.variant.BuiltArtifactsLoader import java.io.File import org.gradle.api.DefaultTask import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.Property import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.Internal import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.PathSensitive import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskAction /** Task to collect APKs in a given [outputDirectory]. */ @CacheableTask abstract class CollectApksTask : DefaultTask() { @get:InputFiles @get:PathSensitive(PathSensitivity.NONE) abstract val apkFolder: DirectoryProperty @get:Input abstract val variantName: Property @get:Internal abstract val builtArtifactsLoader: Property @get:OutputDirectory abstract val outputDirectory: DirectoryProperty @TaskAction fun run() { val outputDir = outputDirectory.asFile.get() outputDir.mkdirs() val builtArtifacts = builtArtifactsLoader.get().load(apkFolder.get()) ?: throw RuntimeException("Cannot load APKs") builtArtifacts.elements.forEach { artifact -> File(artifact.outputFile) .renameTo(outputDir.resolve("APS-${variantName.get()}-${artifact.versionName}.apk")) } } }