in sources/amper-cli/src/org/jetbrains/amper/tasks/android/AndroidAarTask.kt [65:129]
override suspend fun run(dependenciesResult: List<TaskResult>, executionContext: TaskGraphExecutionContext): TaskResult {
val jarResult = dependenciesResult.filterIsInstance<JvmClassesJarTask.Result>().singleOrNull()
?: error("No input classes jar")
// TODO: Implement picking up actual user-provided assets?
// TODO: Implement overriding (refining) assets?
val additionalAssets = dependenciesResult.filterIsInstance<AdditionalAndroidAssetsProvider>()
val outputAarPath = taskOutputRoot.path / jarResult.jarPath.nameWithoutExtension.plus(".aar")
val inputFiles = buildList {
additionalAssets.forEach { result -> result.assetsRoots.forEach { add(it.path) } }
add(jarResult.jarPath)
}
val inputValues = mapOf(
"outputPath" to outputAarPath.pathString,
"requiredPackagingDirs" to Json.encodeToString(
additionalAssets.map { result -> result.assetsRoots.map { it.path.pathString } }
),
)
incrementalCache.execute(taskName.name, inputValues, inputFiles) {
outputAarPath.deleteIfExists()
outputAarPath.createParentDirectories()
val tempDir = createTempDirectory(tempRoot.path)
try {
val manifestStubFile = tempDir / "AndroidManifest.xml"
// TODO: Use a user-provided Manifest if any? Require it? Require `namespace` to be set for libraries?
manifestStubFile.writeText(
"""<?xml version="1.0" encoding="utf-8"?>
|<manifest package="${internalPackageNameFor(module)}" />""".trimMargin()
)
val assetsDir = Path("assets")
outputAarPath.writeZip(
inputs = buildList {
this += ZipInput(
path = jarResult.jarPath,
destPathInArchive = Path("libs") / jarResult.jarPath.name,
)
this += ZipInput(
path = manifestStubFile,
destPathInArchive = manifestStubFile.fileName,
)
additionalAssets.forEach { asset ->
asset.assetsRoots.forEach { assetsRoot ->
this += ZipInput(
path = assetsRoot.path,
destPathInArchive = assetsDir / assetsRoot.relativePackagingPath,
)
}
}
}
)
} finally {
tempDir.deleteRecursively()
}
IncrementalCache.ExecutionResult(
outputFiles = listOf(outputAarPath),
)
}
return Result(
aarPath = outputAarPath,
)
}