From 69361b1bec7219bbe3040d88266aa5cb6592ecda Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 4 Dec 2015 00:02:01 -0800 Subject: [PATCH] Resource merging working. --- src/main/kotlin/com/beust/kobalt/Variant.kt | 6 ++++++ .../beust/kobalt/plugin/android/AndroidBuild.kt | 16 ++++++++++++---- .../beust/kobalt/plugin/android/AndroidPlugin.kt | 13 ++++++++----- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/com/beust/kobalt/Variant.kt b/src/main/kotlin/com/beust/kobalt/Variant.kt index 81accaeb..89e9ffd6 100644 --- a/src/main/kotlin/com/beust/kobalt/Variant.kt +++ b/src/main/kotlin/com/beust/kobalt/Variant.kt @@ -163,6 +163,12 @@ class Variant(val initialProductFlavor: ProductFlavorConfig? = null, } } + fun toCamelcaseDir() : String { + val pfName = productFlavor.name + val btName = buildType.name + return pfName[0].toLowerCase() + pfName.substring(1) + btName[0].toUpperCase() + btName.substring(1) + } + fun toIntermediateDir() : String { if (isDefault) { return "" diff --git a/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidBuild.kt b/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidBuild.kt index 4a72cc15..39fd6075 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidBuild.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidBuild.kt @@ -67,7 +67,7 @@ class AndroidBuild { // val annotationsJar = File("/Users/beust/adt-bundle-mac-x86_64-20140702/sdk/tools/lib/annotations.jar") // val adb = File("/Users/beust/adt-bundle-mac-x86_64-20140702/sdk/platform-tools/adb") - fun run(project: Project, variant: Variant, config: AndroidConfig) { + fun run(project: Project, variant: Variant, config: AndroidConfig, aarDependencies: List) { val logger = StdLogger(StdLogger.Level.VERBOSE) val processExecutor = DefaultProcessExecutor(logger) val javaProcessExecutor = KobaltJavaProcessExecutor() @@ -112,7 +112,11 @@ class AndroidBuild { val mainManifest = File("src/main/AndroidManifest.xml") val appInfo = AppInfo(mainManifest, config) - val manifestOverlays = listOf() + val manifestOverlays = listOf( + File("src/${variant.productFlavor.name}/AndroidManifest.xml"), + File("src/${variant.buildType.name}/AndroidManifest.xml")).filter { + it.exists() + } val libraries = listOf() val outManifest = AndroidFiles.mergedManifest(project, variant) val outAaptSafeManifestLocation = KFiles.joinDir(project.directory, project.buildDirectory, "generatedSafeAapt") @@ -133,8 +137,12 @@ class AndroidBuild { // // Resources // - listOf("main", variant.productFlavor.name, variant.buildType.name).forEach { - val path = "$dir/src/$it/res" + val fullVariantDir = File(variant.toCamelcaseDir()) + val srcList = listOf("main", variant.productFlavor.name, variant.buildType.name, fullVariantDir.path) + .map { "src" + File.separator + it} + + val aarList = aarDependencies.map { it.path + File.separator} + (aarList + srcList).map { it + File.separator + "res" }.forEach { path -> val set = ResourceSet(path) set.addSource(File(path)) set.loadFromFiles(logger) diff --git a/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidPlugin.kt index 25f48b34..2bb57d57 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidPlugin.kt @@ -85,13 +85,13 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v runBefore = arrayOf("compile"), runAfter = arrayOf("clean")) fun taskGenerateRFile(project: Project): TaskResult { - AndroidBuild().run(project, context.variant, configurationFor(project)!!) -// merger.merge(project, context) - val intermediates = AndroidFiles.intermediates(project) val resDir = "temporaryBogusResDir" + val aarDependencies= explodeAarFiles(project, intermediates, File(resDir)) + AndroidBuild().run(project, context.variant, configurationFor(project)!!, aarDependencies) +// merger.merge(project, context) + val notUsed = "" - explodeAarFiles(project, intermediates, File(resDir)) val generated = AndroidFiles.generated(project) val success = generateR(project, generated, aapt(project)) return TaskResult(success) @@ -155,7 +155,8 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v * Extract all the .aar files found in the dependencies and add the android.jar to classpathEntries, * which will be added to the classpath at compile time */ - private fun explodeAarFiles(project: Project, outputDir: String, resDir: File) { + private fun explodeAarFiles(project: Project, outputDir: String, resDir: File) : List { + val result = arrayListOf() project.compileDependencies.filter { it.jarFile.get().name.endsWith(".aar") }.forEach { @@ -180,8 +181,10 @@ public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler, v // Copy all the resources from this aar into the same intermediate directory log(2, "Copying the resources to $resDir") + result.add(destDir) KFiles.copyRecursively(destDir.resolve("res"), resDir, deleteFirst = false) } + return result } private fun compile(project: Project, rDirectory: String): File {