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 }
}
}