Ensure manifest changes trigger new builds.
Xavier Ducrohet [Tue, 11 Sep 2012 20:39:56 +0000 (13:39 -0700)]
The ProcessManifest task was not using manifest files as inputs
so changes in them would not trigger new builds.

Change-Id: I86b6b9ef2b1308c0cf36ccd538f1967ae7c1cc8f

builder/src/main/java/com/android/builder/AndroidBuilder.java
builder/src/main/java/com/android/builder/VariantConfiguration.java
gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy
gradle/src/main/groovy/com/android/build/gradle/ProcessManifestTask.groovy
gradle/src/main/groovy/com/android/build/gradle/internal/BuildTypeDsl.groovy
gradle/src/main/groovy/com/android/build/gradle/internal/ProductFlavorDsl.groovy

index 9be56f1..f083dba 100644 (file)
@@ -327,7 +327,7 @@ public class AndroidBuilder {
         try {
             File mainLocation = config.getDefaultSourceSet().getAndroidManifest();
             File typeLocation = config.getBuildTypeSourceSet().getAndroidManifest();
-            if (typeLocation != null && typeLocation.isDirectory() == false) {
+            if (typeLocation != null && typeLocation.isFile() == false) {
                 typeLocation = null;
             }
 
index b151c4f..33507de 100644 (file)
@@ -401,6 +401,38 @@ public class VariantConfiguration {
         return list;
     }
 
+    public List<File> getManifestInputs() {
+        List<File> inputs = new ArrayList<File>();
+
+        File defaultManifest = mDefaultSourceSet.getAndroidManifest();
+        // this could not exist in a test project.
+        if (defaultManifest != null && defaultManifest.isFile()) {
+            inputs.add(defaultManifest);
+        }
+
+        File typeLocation = mBuildTypeSourceSet.getAndroidManifest();
+        if (typeLocation != null && typeLocation.isFile()) {
+            inputs.add(typeLocation);
+        }
+
+        for (SourceSet sourceSet : mFlavorSourceSets) {
+            File f = sourceSet.getAndroidManifest();
+            if (f != null && f.isFile()) {
+                inputs.add(f);
+            }
+        }
+
+        List<AndroidDependency> libs = getFullDirectDependencies();
+        for (AndroidDependency lib : libs) {
+            File manifest = lib.getManifest();
+            if (manifest != null && manifest.isFile()) {
+                inputs.add(manifest);
+            }
+        }
+
+        return inputs;
+    }
+
     /**
      * Returns the dynamic list of resource folders based on the configuration, its dependencies,
      * as well as tested config if applicable (test of a library).
@@ -456,7 +488,6 @@ public class VariantConfiguration {
         return list;
     }
 
-
     /**
      * Returns the compile classpath for this config. If the config tests a library, this
      * will include the classpath of the tested config
index 6ad3271..a9f039a 100644 (file)
@@ -166,6 +166,7 @@ abstract class AndroidBasePlugin {
         processManifestTask.plugin = this
         processManifestTask.variant = variant
         processManifestTask.configObjects = variant.configObjects
+        processManifestTask.conventionMapping.inputManifests = { variant.config.manifestInputs }
         processManifestTask.conventionMapping.processedManifest = {
             project.file(
                     "$project.buildDir/${manifestOurDir}/$variant.dirName/AndroidManifest.xml")
index 591efe1..08e09a6 100644 (file)
@@ -17,11 +17,17 @@ package com.android.build.gradle
 
 import org.gradle.api.tasks.OutputFile
 import org.gradle.api.tasks.TaskAction
+import org.gradle.api.tasks.InputFiles
 
 /**
  */
 class ProcessManifestTask extends BaseAndroidTask {
 
+    // this is not actually used by the task because it needs a graph more than a list
+    // but we need it here with the @InputFiles annotation to properly trigger recompiles.
+    @InputFiles
+    List<File> inputManifests
+
     @OutputFile
     File processedManifest
 
index cbb089b..b1aa419 100644 (file)
@@ -22,6 +22,8 @@ import com.android.builder.BuildType
  * Dsl overlay for BuildType.
  */
 public class BuildTypeDsl extends BuildType {
+    private static final long serialVersionUID = 1L;
+
     public BuildTypeDsl(String name) {
         super(name)
     }
index 6dd49e6..f51f948 100644 (file)
@@ -22,6 +22,8 @@ import com.android.builder.ProductFlavor
  * Dsl overlay for ProductFlavor.
  */
 public class ProductFlavorDsl extends ProductFlavor {
+    private static final long serialVersionUID = 1L;
+
     public ProductFlavorDsl(String name) {
         super(name)
     }