aboutsummaryrefslogtreecommitdiff
path: root/gradle/src
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2012-12-07 18:50:44 -0800
committerXavier Ducrohet <xav@android.com>2012-12-10 17:01:07 -0800
commitcd3aa604316fa5c6c9486f2cb9caa3eaccd74476 (patch)
tree38455d4e69fb7dd84b1a8647b8f6289a61c60486 /gradle/src
parent3b49b176fcbfe1bbae0f63f769a39a3cb41c79ef (diff)
downloadbuild-cd3aa604316fa5c6c9486f2cb9caa3eaccd74476.tar.gz
Use the ResourceMerger to handle overlay.
This creates a merged res folder that is then fed to aapt. Right now the merged folder does not have its image crunched, nor is it incremental. This means the build will be slower (previously crunching was incremental). Next step is to change aapt to be able to crunch single images and then make the merging itself incremental. Details: The processImage task is replaced by mergeResourceTask. It is also used for library project that had to merge their resources before bundling, so the previous copy task is removed and the merge is done directly in the bundle folder. The API for AndroidBuilder is changed to reflect those changes. processResource now only takes one res folder which is meant to be the merged one. The getResourceInputs on VariantConfig is changed to return a list of ResourceSets (except not actual ResourceSet since this would load the resources, so instead a list of list of files). Also changed build.gradle for the gradle plugin to have the integration test first deploy the plugin locally in order to use the right one. Change-Id: Ide96f733be835d94518b831baee7ee77b9a61dec
Diffstat (limited to 'gradle/src')
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/AppPlugin.groovy4
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy51
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/BuildVariant.groovy4
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/LibraryPlugin.groovy13
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/ApplicationVariant.groovy4
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/DefaultBuildVariant.groovy6
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/tasks/MergeResourcesTask.groovy68
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ProcessImagesTask.groovy31
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ProcessResourcesTask.groovy8
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/tasks/MergeResources.groovy (renamed from gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessImages.groovy)2
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessResources.groovy4
-rw-r--r--gradle/src/test/groovy/com/android/build/gradle/AppPluginDslTest.groovy2
-rw-r--r--gradle/src/test/groovy/com/android/build/gradle/LibraryPluginDslTest.groovy2
13 files changed, 113 insertions, 86 deletions
diff --git a/gradle/src/main/groovy/com/android/build/gradle/AppPlugin.groovy b/gradle/src/main/groovy/com/android/build/gradle/AppPlugin.groovy
index d777023..d9dffd5 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/AppPlugin.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/AppPlugin.groovy
@@ -419,8 +419,8 @@ class AppPlugin extends com.android.build.gradle.BasePlugin implements org.gradl
// Add a task to process the manifest(s)
createProcessManifestTask(variant, "manifests")
- // Add a task to crunch resource files
- createProcessImagesTask(variant)
+ // Add a task to merge the resource folders
+ createMergeResourcesTask(variant)
// Add a task to create the BuildConfig class
createBuildConfigTask(variant)
diff --git a/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy b/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
index e285403..0c9dd45 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
@@ -34,7 +34,7 @@ import com.android.build.gradle.internal.tasks.InstallTask
import com.android.build.gradle.internal.tasks.PackageApplicationTask
import com.android.build.gradle.internal.tasks.PrepareDependenciesTask
import com.android.build.gradle.internal.tasks.PrepareLibraryTask
-import com.android.build.gradle.internal.tasks.ProcessImagesTask
+import com.android.build.gradle.internal.tasks.MergeResourcesTask
import com.android.build.gradle.internal.tasks.ProcessManifestTask
import com.android.build.gradle.internal.tasks.ProcessResourcesTask
import com.android.build.gradle.internal.tasks.ProcessTestManifestTask
@@ -303,16 +303,25 @@ public abstract class BasePlugin {
}
}
- protected void createProcessImagesTask(ApplicationVariant variant) {
- def processImagesTask = project.tasks.add("process${variant.name}Images", ProcessImagesTask)
- variant.processImagesTask = processImagesTask
+ protected void createMergeResourcesTask(ApplicationVariant variant) {
+ createMergeResourcesTask(variant, "$project.buildDir/res/$variant.dirName")
+ }
+
+ protected void createMergeResourcesTask(ApplicationVariant variant, String location) {
+ def mergeResourcesTask = project.tasks.add("merge${variant.name}Resources",
+ MergeResourcesTask)
+ variant.mergeResourcesTask = mergeResourcesTask
- processImagesTask.plugin = this
- processImagesTask.variant = variant
+ mergeResourcesTask.plugin = this
+ mergeResourcesTask.variant = variant
+
+ mergeResourcesTask.conventionMapping.inputResourceSets = { variant.config.resourceSets }
+ mergeResourcesTask.conventionMapping.rawInputFolders = {
+ MergeResourcesTask.inlineInputs(variant.config.resourceSets)
+ }
- processImagesTask.conventionMapping.resDirectories = { variant.config.resourceInputs }
- processImagesTask.conventionMapping.outputDir = {
- project.file("$project.buildDir/res/$variant.dirName")
+ mergeResourcesTask.conventionMapping.outputDir = {
+ project.file(location)
}
}
@@ -347,9 +356,10 @@ public abstract class BasePlugin {
}
protected void createProcessResTask(ApplicationVariant variant) {
- def processResources = project.tasks.add("process${variant.name}Res", ProcessResourcesTask)
+ def processResources = project.tasks.add("process${variant.name}Resources",
+ ProcessResourcesTask)
variant.processResourcesTask = processResources
- processResources.dependsOn variant.processManifestTask
+ processResources.dependsOn variant.processManifestTask, variant.mergeResourcesTask
processResources.plugin = this
processResources.variant = variant
@@ -360,17 +370,8 @@ public abstract class BasePlugin {
variant.processManifestTask.outManifest
}
- if (variant.processImagesTask != null) {
- processResources.dependsOn variant.processImagesTask
-
- processResources.conventionMapping.preprocessResDir = {
- variant.processImagesTask.outputDir
- }
- processResources.conventionMapping.resDirectories = {
- variant.processImagesTask.resDirectories
- }
- } else {
- processResources.conventionMapping.resDirectories = { config.resourceInputs }
+ processResources.conventionMapping.mergedResFolder = {
+ variant.mergeResourcesTask.outputDir
}
processResources.conventionMapping.assetsDir = {
@@ -520,14 +521,14 @@ public abstract class BasePlugin {
// Add a task to process the manifest
createProcessTestManifestTask(variant, "manifests")
- // Add a task to crunch resource files
- createProcessImagesTask(variant)
+ // Add a task to merge the resource folders
+ createMergeResourcesTask(variant)
if (testedVariant.config.type == VariantConfiguration.Type.LIBRARY) {
// in this case the tested library must be fully built before test can be built!
if (testedVariant.assembleTask != null) {
variant.processManifestTask.dependsOn testedVariant.assembleTask
- variant.processImagesTask.dependsOn testedVariant.assembleTask
+ variant.mergeResourcesTask.dependsOn testedVariant.assembleTask
}
}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/BuildVariant.groovy b/gradle/src/main/groovy/com/android/build/gradle/BuildVariant.groovy
index ebcef1c..71f79c1 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/BuildVariant.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/BuildVariant.groovy
@@ -22,7 +22,7 @@ import com.android.build.gradle.tasks.AidlCompile
import com.android.build.gradle.tasks.Dex
import com.android.build.gradle.tasks.GenerateBuildConfig
import com.android.build.gradle.tasks.PackageApplication
-import com.android.build.gradle.tasks.ProcessImages
+import com.android.build.gradle.tasks.MergeResources
import com.android.build.gradle.tasks.ProcessManifest
import com.android.build.gradle.tasks.ProcessResources
import com.android.build.gradle.tasks.ZipAlign
@@ -122,7 +122,7 @@ public interface BuildVariant {
* Returns the image processing task.
*/
@Nullable
- ProcessImages getProcessImages()
+ MergeResources getMergeResources()
/**
* Returns the Android Resources processing task.
diff --git a/gradle/src/main/groovy/com/android/build/gradle/LibraryPlugin.groovy b/gradle/src/main/groovy/com/android/build/gradle/LibraryPlugin.groovy
index 8f6d6cf..de13955 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/LibraryPlugin.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/LibraryPlugin.groovy
@@ -153,6 +153,9 @@ public class LibraryPlugin extends BasePlugin implements Plugin<Project> {
// Add a task to process the manifest(s)
createProcessManifestTask(variant, DIR_BUNDLES)
+ // Add a task to merge the resource folders
+ createMergeResourcesTask(variant, "$project.buildDir/$DIR_BUNDLES/${variant.dirName}/res")
+
// Add a task to create the BuildConfig class
createBuildConfigTask(variant)
@@ -179,14 +182,6 @@ public class LibraryPlugin extends BasePlugin implements Plugin<Project> {
jar.exclude(packageName + "/R.class")
jar.exclude(packageName + "/R\$*.class")
- // package the android resources into the bundle folder
- Copy packageRes = project.tasks.add("package${variant.name}Res", Copy)
- // packageRes from 3 sources. the order is important to make sure the override works well.
- // TODO: fix the case of values -- need to merge the XML!
- packageRes.from(defaultConfigData.sourceSet.res.directory,
- buildTypeData.sourceSet.res.directory)
- packageRes.into(project.file("$project.buildDir/$DIR_BUNDLES/${variant.dirName}/res"))
-
// package the aidl files into the bundle folder
Copy packageAidl = project.tasks.add("package${variant.name}Aidl", Copy)
// packageAidl from 3 sources. the order is important to make sure the override works well.
@@ -201,7 +196,7 @@ public class LibraryPlugin extends BasePlugin implements Plugin<Project> {
packageSymbol.into(project.file("$project.buildDir/$DIR_BUNDLES/${variant.dirName}"))
Zip bundle = project.tasks.add("bundle${variant.name}", Zip)
- bundle.dependsOn jar, packageRes, packageAidl, packageSymbol
+ bundle.dependsOn jar, packageAidl, packageSymbol
bundle.setDescription("Assembles a bundle containing the library in ${variant.name}.");
bundle.destinationDir = project.file("$project.buildDir/libs")
bundle.extension = BuilderConstants.EXT_LIB_ARCHIVE
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/ApplicationVariant.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/ApplicationVariant.groovy
index c8d869a..b5c7cc1 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/ApplicationVariant.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/ApplicationVariant.groovy
@@ -21,7 +21,7 @@ import com.android.build.gradle.internal.tasks.DexTask
import com.android.build.gradle.internal.tasks.GenerateBuildConfigTask
import com.android.build.gradle.internal.tasks.PackageApplicationTask
import com.android.build.gradle.internal.tasks.PrepareDependenciesTask
-import com.android.build.gradle.internal.tasks.ProcessImagesTask
+import com.android.build.gradle.internal.tasks.MergeResourcesTask
import com.android.build.gradle.internal.tasks.ProcessResourcesTask
import com.android.build.gradle.internal.tasks.RunTestsTask
import com.android.build.gradle.internal.tasks.ZipAlignTask
@@ -45,7 +45,7 @@ public abstract class ApplicationVariant {
ProcessManifest processManifestTask
AidlCompileTask aidlCompileTask
- ProcessImagesTask processImagesTask
+ MergeResourcesTask mergeResourcesTask
ProcessResourcesTask processResourcesTask
GenerateBuildConfigTask generateBuildConfigTask
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/DefaultBuildVariant.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/DefaultBuildVariant.groovy
index 790f7b7..96686bb 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/DefaultBuildVariant.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/DefaultBuildVariant.groovy
@@ -20,7 +20,7 @@ import com.android.build.gradle.tasks.AidlCompile
import com.android.build.gradle.tasks.Dex
import com.android.build.gradle.tasks.GenerateBuildConfig
import com.android.build.gradle.tasks.PackageApplication
-import com.android.build.gradle.tasks.ProcessImages
+import com.android.build.gradle.tasks.MergeResources
import com.android.build.gradle.tasks.ProcessManifest
import com.android.build.gradle.tasks.ProcessResources
import com.android.build.gradle.tasks.ZipAlign
@@ -102,8 +102,8 @@ public class DefaultBuildVariant implements BuildVariant {
}
@Override
- ProcessImages getProcessImages() {
- return variant.processImagesTask
+ MergeResources getMergeResources() {
+ return variant.mergeResourcesTask
}
@Override
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/MergeResourcesTask.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/MergeResourcesTask.groovy
new file mode 100644
index 0000000..c51cb77
--- /dev/null
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/MergeResourcesTask.groovy
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.build.gradle.internal.tasks
+
+import com.android.build.gradle.tasks.MergeResources
+import com.google.common.collect.Lists
+import org.gradle.api.tasks.InputFiles
+import org.gradle.api.tasks.TaskAction
+
+class MergeResourcesTask extends MergeResources {
+
+ // fake input to detect changes. Not actually used by the task
+ @InputFiles
+ Iterable<File> rawInputFolders
+
+ // actual inputs
+ List<List<File>> inputResourceSets
+
+ @TaskAction
+ void generate() {
+ // this is not yet incremental. Need to clean up the previous merge result.
+ File destinationDir = getOutputDir()
+
+ deleteFolder(destinationDir)
+ destinationDir.mkdir()
+
+ getBuilder().mergeResources(destinationDir.absolutePath, getInputResourceSets())
+ }
+
+ static Iterable<File> inlineInputs(List<List<File>> inputs) {
+ List<File> list = Lists.newArrayList();
+
+ for (List<File> folders : inputs) {
+ for (File folder : folders) {
+ list.add(folder);
+ }
+ }
+
+ return list;
+ }
+
+ private static void deleteFolder(File folder) {
+ File[] files = folder.listFiles()
+ if (files != null && files.length > 0) {
+ for (File file : files) {
+ if (file.isDirectory()) {
+ deleteFolder(file)
+ }
+ file.delete();
+ }
+ }
+
+ folder.delete()
+ }
+}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ProcessImagesTask.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ProcessImagesTask.groovy
deleted file mode 100644
index 5f0a261..0000000
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ProcessImagesTask.groovy
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.build.gradle.internal.tasks
-
-import com.android.build.gradle.tasks.ProcessImages
-import org.gradle.api.tasks.InputFiles
-import org.gradle.api.tasks.TaskAction
-
-class ProcessImagesTask extends ProcessImages {
-
- @InputFiles
- Iterable<File> resDirectories
-
- @TaskAction
- void generate() {
- getBuilder().processImages(getOutputDir().absolutePath, getResDirectories())
- }
-}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ProcessResourcesTask.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ProcessResourcesTask.groovy
index bb4d876..af53b65 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ProcessResourcesTask.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/ProcessResourcesTask.groovy
@@ -14,23 +14,18 @@
* limitations under the License.
*/
package com.android.build.gradle.internal.tasks
-
import com.android.build.gradle.internal.AaptOptionsImpl
import com.android.build.gradle.tasks.ProcessResources
import com.android.builder.SymbolFileProvider
import com.android.builder.VariantConfiguration
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputDirectory
-import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Nested
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.TaskAction
public class ProcessResourcesTask extends ProcessResources {
- @InputFiles
- Iterable<File> resDirectories
-
@InputDirectory @Optional
File assetsDir
@@ -54,8 +49,7 @@ public class ProcessResourcesTask extends ProcessResources {
getBuilder().processResources(
getManifestFile(),
- getPreprocessResDir(),
- getResDirectories(),
+ getMergedResFolder(),
getAssetsDir(),
getLibraries(),
getPackageOverride(),
diff --git a/gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessImages.groovy b/gradle/src/main/groovy/com/android/build/gradle/tasks/MergeResources.groovy
index b273775..0ed64ea 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessImages.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/tasks/MergeResources.groovy
@@ -18,7 +18,7 @@ package com.android.build.gradle.tasks
import com.android.build.gradle.internal.tasks.BaseTask
import org.gradle.api.tasks.OutputDirectory
-class ProcessImages extends BaseTask {
+class MergeResources extends BaseTask {
@OutputDirectory
File outputDir
diff --git a/gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessResources.groovy b/gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessResources.groovy
index 4482428..da4ab76 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessResources.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/tasks/ProcessResources.groovy
@@ -27,8 +27,8 @@ public class ProcessResources extends BaseTask {
@InputFile
File manifestFile
- @InputDirectory @Optional
- File preprocessResDir
+ @InputDirectory
+ File mergedResFolder
@OutputDirectory @Optional
File sourceOutputDir
diff --git a/gradle/src/test/groovy/com/android/build/gradle/AppPluginDslTest.groovy b/gradle/src/test/groovy/com/android/build/gradle/AppPluginDslTest.groovy
index cbccfce..b8f994e 100644
--- a/gradle/src/test/groovy/com/android/build/gradle/AppPluginDslTest.groovy
+++ b/gradle/src/test/groovy/com/android/build/gradle/AppPluginDslTest.groovy
@@ -186,7 +186,7 @@ public class AppPluginDslTest extends BaseTest {
private void checkTasks(BuildVariant variant, boolean testVariant) {
assertNotNull(variant.processManifest)
assertNotNull(variant.aidlCompile)
- assertNotNull(variant.processImages)
+ assertNotNull(variant.mergeResources)
assertNotNull(variant.processResources)
assertNotNull(variant.generateBuildConfig)
assertNotNull(variant.javaCompile)
diff --git a/gradle/src/test/groovy/com/android/build/gradle/LibraryPluginDslTest.groovy b/gradle/src/test/groovy/com/android/build/gradle/LibraryPluginDslTest.groovy
index 3495219..25f6a65 100644
--- a/gradle/src/test/groovy/com/android/build/gradle/LibraryPluginDslTest.groovy
+++ b/gradle/src/test/groovy/com/android/build/gradle/LibraryPluginDslTest.groovy
@@ -70,7 +70,7 @@ public class LibraryPluginDslTest extends BaseTest {
private void checkTestTasks(BuildVariant variant) {
assertNotNull(variant.processManifest)
assertNotNull(variant.aidlCompile)
- assertNotNull(variant.processImages)
+ assertNotNull(variant.mergeResources)
assertNotNull(variant.processResources)
assertNotNull(variant.generateBuildConfig)
assertNotNull(variant.javaCompile)