fun runAndroidBuild()

in sources/android-integration/amper-android-runner/src/org.jetbrains.amper.android/Runner.kt [34:92]


fun runAndroidBuild(
    buildRequest: AndroidBuildRequest,
    buildPath: Path,
    gradleLogStdoutPath: Path,
    gradleLogStderrPath: Path,
    jdkDir: Path,
    debug: Boolean = false,
    eventHandler: (ProgressEvent) -> Unit,
): List<Path> {
    val settingsGradlePath = buildPath.createSettingsGradle(buildRequest)
    buildPath.createBuildGradle()
    buildPath.createLocalProperties(buildRequest)

    require(gradleLogStdoutPath.notExists()) {
        "Log file for Gradle stdout already exists: ${gradleLogStdoutPath.pathString}"
    }
    require(gradleLogStdoutPath.notExists()) {
        "Log file for Gradle stderr already exists: ${gradleLogStderrPath.pathString}"
    }

    GradleConnector
        .newConnector()
        .forProjectDirectory(settingsGradlePath.parent.toFile())
        .connect()
        .use { connection ->
            val androidProjects = connection.extractAndroidProjectModelsFromBuild(jdkDir, debug)
            val lazyArtifacts = buildList {
                for (target in buildRequest.targets) {
                    val androidProject = androidProjects[target] ?: continue
                    addAll(androidProject.lazyArtifacts(connection, buildRequest, jdkDir, debug))
                    when(buildRequest.phase) {
                        AndroidBuildRequest.Phase.Test -> { /* nothing to do here, just return the artifact */ }
                        else -> {
                            val tasks = androidProject.taskList(connection, buildRequest, target, jdkDir)
                            try {
                                gradleLogStdoutPath.outputStream(WRITE, CREATE, APPEND).buffered().use { stdout ->
                                    gradleLogStderrPath.outputStream(WRITE, CREATE, APPEND).buffered().use { stderr ->
                                        connection.runBuild(
                                            tasks = tasks,
                                            eventHandler = eventHandler,
                                            stdoutStream = stdout,
                                            stderrStream = stderr,
                                            buildRequest = buildRequest,
                                            debug = debug,
                                            jdkDir = jdkDir,
                                        )
                                    }
                                }
                            } catch (t: RuntimeException) {
                                throw IllegalStateException("Error during Gradle build", t)
                            }
                        }
                    }
                }
            }

            return lazyArtifacts.map { it.value }
        }
}