diff --git a/src/com/facebook/buck/android/AndroidBinaryBuildRuleFactory.java b/src/com/facebook/buck/android/AndroidBinaryBuildRuleFactory.java
index 3a20be3..fa804cf 100644
--- a/src/com/facebook/buck/android/AndroidBinaryBuildRuleFactory.java
+++ b/src/com/facebook/buck/android/AndroidBinaryBuildRuleFactory.java
@@ -38,9 +38,7 @@
   protected void amendBuilder(AndroidBinaryRule.Builder builder,
       BuildRuleFactoryParams params) throws NoSuchBuildTargetException {
     // manifest
-    String manifestAttribute = params.getRequiredStringAttribute("manifest");
-    String manifestPath = params.resolveFilePathRelativeToBuildFileDirectory(manifestAttribute);
-    builder.setManifest(manifestPath);
+    builder.setManifest(params.getRequiredSourcePath("manifest", builder));
 
     // target
     String target = params.getRequiredStringAttribute("target");
diff --git a/src/com/facebook/buck/android/AndroidBinaryRule.java b/src/com/facebook/buck/android/AndroidBinaryRule.java
index f6ece50..e5a1bc3 100644
--- a/src/com/facebook/buck/android/AndroidBinaryRule.java
+++ b/src/com/facebook/buck/android/AndroidBinaryRule.java
@@ -40,10 +40,10 @@
 import com.facebook.buck.rules.BuildableProperties;
 import com.facebook.buck.rules.DependencyGraph;
 import com.facebook.buck.rules.DoNotUseAbstractBuildable;
-import com.facebook.buck.rules.FileSourcePath;
 import com.facebook.buck.rules.InstallableBuildRule;
 import com.facebook.buck.rules.RuleKey;
 import com.facebook.buck.rules.SourcePath;
+import com.facebook.buck.rules.SourcePaths;
 import com.facebook.buck.shell.AbstractGenruleStep;
 import com.facebook.buck.shell.EchoStep;
 import com.facebook.buck.shell.SymlinkFilesIntoDirectoryStep;
@@ -59,6 +59,7 @@
 import com.facebook.buck.util.DirectoryTraverser;
 import com.facebook.buck.util.HumanReadableException;
 import com.facebook.buck.util.MorePaths;
+import com.facebook.buck.util.Optionals;
 import com.facebook.buck.zip.RepackZipEntriesStep;
 import com.facebook.buck.zip.ZipDirectoryWithMaxDeflateStep;
 import com.google.common.annotations.VisibleForTesting;
@@ -168,7 +169,7 @@
     }
   }
 
-  private final String manifest;
+  private final SourcePath manifest;
   private final String target;
   private final ImmutableSortedSet<BuildRule> classpathDeps;
   private final Keystore keystore;
@@ -209,7 +210,7 @@
    */
   protected AndroidBinaryRule(
       BuildRuleParams buildRuleParams,
-      String manifest,
+      SourcePath manifest,
       String target,
       ImmutableSortedSet<BuildRule> classpathDeps,
       Keystore keystore,
@@ -270,7 +271,7 @@
   @Override
   public RuleKey.Builder appendToRuleKey(RuleKey.Builder builder) throws IOException {
     super.appendToRuleKey(builder)
-        .set("manifest", manifest)
+        .set("manifest", manifest.asReference())
         .set("target", target)
         .set("keystore", keystore.getBuildTarget().getFullyQualifiedName())
         .setRuleNames("classpathDeps", classpathDeps)
@@ -424,16 +425,13 @@
 
   @Override
   public List<String> getInputsToCompareToOutput() {
-    ImmutableList.Builder<String> inputs = ImmutableList.builder();
-    inputs.add(manifest);
-    if (proguardConfig.isPresent()) {
-      SourcePath sourcePath = proguardConfig.get();
-      // Alternatively, if it is a BuildTargetSourcePath, then it should not be included.
-      if (sourcePath instanceof FileSourcePath) {
-        inputs.add(sourcePath.asReference());
-      }
-    }
+    ImmutableList.Builder<SourcePath> sourcePaths = ImmutableList.builder();
+    sourcePaths.add(manifest);
 
+    Optionals.addIfPresent(proguardConfig, sourcePaths);
+
+    ImmutableList.Builder<String> inputs = ImmutableList.builder();
+    inputs.addAll(SourcePaths.filterInputsToCompareToOutput(sourcePaths.build()));
     return inputs.build();
   }
 
@@ -476,7 +474,8 @@
 
     // Symlink the manifest to a path named AndroidManifest.xml. Do this before running any other
     // commands to ensure that it is available at the desired path.
-    steps.add(new MkdirAndSymlinkFileStep(getManifest(), getAndroidManifestXml()));
+    steps.add(new MkdirAndSymlinkFileStep(getManifest().resolve(context).toString(),
+        getAndroidManifestXml()));
 
     final AndroidTransitiveDependencies transitiveDependencies = findTransitiveDependencies(
         context.getDependencyGraph());
@@ -1184,7 +1183,7 @@
    *     AndroidManifest.xml.
    */
   @Override
-  public String getManifest() {
+  public SourcePath getManifest() {
     return manifest;
   }
 
@@ -1229,7 +1228,7 @@
   public static class Builder extends AbstractBuildRuleBuilder<AndroidBinaryRule> {
     private static final PackageType DEFAULT_PACKAGE_TYPE = PackageType.DEBUG;
 
-    private String manifest;
+    private SourcePath manifest;
     private String target;
 
     /** This should always be a subset of {@link #getDeps()}. */
@@ -1352,7 +1351,7 @@
       return this;
     }
 
-    public Builder setManifest(String manifest) {
+    public Builder setManifest(SourcePath manifest) {
       this.manifest = manifest;
       return this;
     }
diff --git a/src/com/facebook/buck/android/AndroidInstrumentationApk.java b/src/com/facebook/buck/android/AndroidInstrumentationApk.java
index bb5bd03..356b035 100644
--- a/src/com/facebook/buck/android/AndroidInstrumentationApk.java
+++ b/src/com/facebook/buck/android/AndroidInstrumentationApk.java
@@ -28,6 +28,7 @@
 import com.facebook.buck.rules.DependencyGraph;
 import com.facebook.buck.rules.InstallableBuildRule;
 import com.facebook.buck.rules.RuleKey;
+import com.facebook.buck.rules.SourcePath;
 import com.facebook.buck.util.HumanReadableException;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
@@ -55,7 +56,7 @@
   private final ImmutableSortedSet<BuildRule> classpathDepsForInstrumentationApk;
 
   private AndroidInstrumentationApk(BuildRuleParams buildRuleParams,
-      String manifest,
+      SourcePath manifest,
       AndroidBinaryRule apkUnderTest,
       ImmutableSortedSet<BuildRule> classpathDepsForInstrumentationApk) {
     super(buildRuleParams,
@@ -129,7 +130,7 @@
 
   public static class Builder extends AbstractBuildRuleBuilder<AndroidInstrumentationApk> {
 
-    private String manifest = null;
+    private SourcePath manifest = null;
     private BuildTarget apk = null;
 
     /** This should always be a subset of {@link #getDeps()}. */
@@ -160,7 +161,7 @@
           getBuildTargetsAsBuildRules(ruleResolver, classpathDeps.build()));
     }
 
-    public Builder setManifest(String manifest) {
+    public Builder setManifest(SourcePath manifest) {
       this.manifest = manifest;
       return this;
     }
diff --git a/src/com/facebook/buck/android/AndroidInstrumentationApkRuleFactory.java b/src/com/facebook/buck/android/AndroidInstrumentationApkRuleFactory.java
index 04e4a43..2576e7e 100644
--- a/src/com/facebook/buck/android/AndroidInstrumentationApkRuleFactory.java
+++ b/src/com/facebook/buck/android/AndroidInstrumentationApkRuleFactory.java
@@ -17,10 +17,10 @@
 package com.facebook.buck.android;
 
 import com.facebook.buck.model.BuildTarget;
-import com.facebook.buck.rules.AbstractBuildRuleFactory;
-import com.facebook.buck.rules.BuildRuleFactoryParams;
 import com.facebook.buck.parser.NoSuchBuildTargetException;
 import com.facebook.buck.rules.AbstractBuildRuleBuilderParams;
+import com.facebook.buck.rules.AbstractBuildRuleFactory;
+import com.facebook.buck.rules.BuildRuleFactoryParams;
 
 public class AndroidInstrumentationApkRuleFactory
     extends AbstractBuildRuleFactory<AndroidInstrumentationApk.Builder> {
@@ -34,9 +34,7 @@
   protected void amendBuilder(AndroidInstrumentationApk.Builder builder,
       BuildRuleFactoryParams params) throws NoSuchBuildTargetException {
     // manifest
-    String manifestAttribute = params.getRequiredStringAttribute("manifest");
-    String manifestPath = params.resolveFilePathRelativeToBuildFileDirectory(manifestAttribute);
-    builder.setManifest(manifestPath);
+    builder.setManifest(params.getRequiredSourcePath("manifest", builder));
 
     // apk
     String apk = params.getRequiredStringAttribute("apk");
diff --git a/src/com/facebook/buck/android/ApkGenrule.java b/src/com/facebook/buck/android/ApkGenrule.java
index 839db09..926ca14 100644
--- a/src/com/facebook/buck/android/ApkGenrule.java
+++ b/src/com/facebook/buck/android/ApkGenrule.java
@@ -27,6 +27,7 @@
 import com.facebook.buck.rules.BuildableProperties;
 import com.facebook.buck.rules.InstallableBuildRule;
 import com.facebook.buck.rules.RuleKey;
+import com.facebook.buck.rules.SourcePath;
 import com.facebook.buck.shell.Genrule;
 import com.facebook.buck.step.ExecutionContext;
 import com.facebook.buck.util.HumanReadableException;
@@ -100,7 +101,7 @@
   }
 
   @Override
-  public String getManifest() {
+  public SourcePath getManifest() {
     return apk.getManifest();
   }
 
diff --git a/src/com/facebook/buck/cli/InstallCommand.java b/src/com/facebook/buck/cli/InstallCommand.java
index 821bee5..cabfa0e 100644
--- a/src/com/facebook/buck/cli/InstallCommand.java
+++ b/src/com/facebook/buck/cli/InstallCommand.java
@@ -24,6 +24,7 @@
 import com.android.ddmlib.TimeoutException;
 import com.facebook.buck.command.Build;
 import com.facebook.buck.event.LogEvent;
+import com.facebook.buck.rules.BuildContext;
 import com.facebook.buck.rules.BuildRule;
 import com.facebook.buck.rules.DependencyGraph;
 import com.facebook.buck.rules.InstallableBuildRule;
@@ -83,7 +84,8 @@
 
     // Uninstall the app first, if requested.
     if (options.shouldUninstallFirst()) {
-      String packageName = tryToExtractPackageNameFromManifest(installableBuildRule);
+      String packageName = tryToExtractPackageNameFromManifest(installableBuildRule,
+          build.getBuildContext().getDependencyGraph());
       uninstallApk(packageName,
           options.adbOptions(),
           options.targetDeviceOptions(),
@@ -99,7 +101,10 @@
     // We've installed the application successfully.
     // Is either of --activity or --run present?
     if (options.shouldStartActivity()) {
-      exitCode = startActivity(installableBuildRule, options.getActivityToStart(), options,
+      exitCode = startActivity(installableBuildRule,
+          options.getActivityToStart(),
+          options,
+          build.getBuildContext(),
           build.getExecutionContext());
       if (exitCode != 0) {
         return exitCode;
@@ -109,12 +114,15 @@
     return exitCode;
   }
 
-  private int startActivity(InstallableBuildRule androidBinaryRule, String activity,
-      InstallCommandOptions options, ExecutionContext context) throws IOException {
+  private int startActivity(InstallableBuildRule androidBinaryRule,
+      String activity,
+      InstallCommandOptions options,
+      BuildContext buildContext,
+      ExecutionContext context) throws IOException {
 
     // Might need the package name and activities from the AndroidManifest.
-    AndroidManifestReader reader = DefaultAndroidManifestReader.forPath(
-        androidBinaryRule.getManifest());
+    String pathToManifest = androidBinaryRule.getManifest().resolve(buildContext).toString();
+    AndroidManifestReader reader = DefaultAndroidManifestReader.forPath(pathToManifest);
 
     if (activity == null) {
       // Get list of activities that show up in the launcher.
diff --git a/src/com/facebook/buck/cli/UninstallCommand.java b/src/com/facebook/buck/cli/UninstallCommand.java
index 6b264b3..d97553d 100644
--- a/src/com/facebook/buck/cli/UninstallCommand.java
+++ b/src/com/facebook/buck/cli/UninstallCommand.java
@@ -86,7 +86,8 @@
     ExecutionContext context = createExecutionContext(options, dependencyGraph);
 
     // Find application package name from manifest and uninstall from matching devices.
-    String appId = tryToExtractPackageNameFromManifest(installableBuildRule);
+    String appId = tryToExtractPackageNameFromManifest(installableBuildRule,
+        dependencyGraph);
     return uninstallApk(appId,
         options.adbOptions(),
         options.targetDeviceOptions(),
diff --git a/src/com/facebook/buck/cli/UninstallSupportCommandRunner.java b/src/com/facebook/buck/cli/UninstallSupportCommandRunner.java
index 8653018..35af8ea 100644
--- a/src/com/facebook/buck/cli/UninstallSupportCommandRunner.java
+++ b/src/com/facebook/buck/cli/UninstallSupportCommandRunner.java
@@ -23,6 +23,7 @@
 import com.android.ddmlib.ShellCommandUnresponsiveException;
 import com.android.ddmlib.TimeoutException;
 import com.facebook.buck.cli.UninstallCommandOptions.UninstallOptions;
+import com.facebook.buck.rules.DependencyGraph;
 import com.facebook.buck.rules.InstallableBuildRule;
 import com.facebook.buck.step.ExecutionContext;
 import com.facebook.buck.util.DefaultAndroidManifestReader;
@@ -148,8 +149,9 @@
     }
   }
 
-  String tryToExtractPackageNameFromManifest(InstallableBuildRule androidBinaryRule) {
-    String pathToManifest = androidBinaryRule.getManifest();
+  String tryToExtractPackageNameFromManifest(InstallableBuildRule androidBinaryRule,
+      DependencyGraph dependencyGraph) {
+    String pathToManifest = androidBinaryRule.getManifest().resolve(dependencyGraph).toString();
 
     // Note that the file may not exist if AndroidManifest.xml is a generated file.
     File androidManifestXml = new File(pathToManifest);
diff --git a/src/com/facebook/buck/rules/BuildRuleFactoryParams.java b/src/com/facebook/buck/rules/BuildRuleFactoryParams.java
index 3deceb7..34d3018 100644
--- a/src/com/facebook/buck/rules/BuildRuleFactoryParams.java
+++ b/src/com/facebook/buck/rules/BuildRuleFactoryParams.java
@@ -232,6 +232,17 @@
   }
 
   /**
+   * @param identifier for the argument in this params.
+   * @param builder If the value associated with {@code identifier} corresponds to a
+   *     {@link BuildTarget}, that build target will be added to the {@code deps} of this builder.
+   * @return a source path that corresponds to the specified {@code identifier}.
+   */
+  public SourcePath getRequiredSourcePath(String identifier, AbstractBuildRuleBuilder<?> builder) {
+    String resource = getRequiredStringAttribute(identifier);
+    return asSourcePath(resource, builder);
+  }
+
+  /**
    * @param resource that identifies either a file path or a build target.
    * @param builder If {@code resource} corresponds to a {@link BuildTarget}, that build target will
    *     be added to the {@code deps} of this builder.
diff --git a/src/com/facebook/buck/rules/BuildTargetSourcePath.java b/src/com/facebook/buck/rules/BuildTargetSourcePath.java
index f90dd2f..3dc3d8b 100644
--- a/src/com/facebook/buck/rules/BuildTargetSourcePath.java
+++ b/src/com/facebook/buck/rules/BuildTargetSourcePath.java
@@ -36,7 +36,12 @@
 
   @Override
   public Path resolve(BuildContext context) {
-    BuildRule rule = context.getDependencyGraph().findBuildRuleByTarget(buildTarget);
+    return resolve(context.getDependencyGraph());
+  }
+
+  @Override
+  public Path resolve(DependencyGraph graph) {
+    BuildRule rule = graph.findBuildRuleByTarget(buildTarget);
     if (rule == null) {
       throw new HumanReadableException("Cannot resolve: %s", buildTarget);
     }
diff --git a/src/com/facebook/buck/rules/FileSourcePath.java b/src/com/facebook/buck/rules/FileSourcePath.java
index ad808a7..f44fcd6 100644
--- a/src/com/facebook/buck/rules/FileSourcePath.java
+++ b/src/com/facebook/buck/rules/FileSourcePath.java
@@ -34,6 +34,11 @@
   }
 
   @Override
+  public Path resolve(DependencyGraph graph) {
+    return Paths.get(relativePath);
+  }
+
+  @Override
   public String asReference() {
     return relativePath;
   }
diff --git a/src/com/facebook/buck/rules/InstallableBuildRule.java b/src/com/facebook/buck/rules/InstallableBuildRule.java
index cca3ebb..7e2b81e 100644
--- a/src/com/facebook/buck/rules/InstallableBuildRule.java
+++ b/src/com/facebook/buck/rules/InstallableBuildRule.java
@@ -21,7 +21,7 @@
   /**
    * @return The manifest file for this build rule.
    */
-  public String getManifest();
+  public SourcePath getManifest();
 
   /**
    * @return The APK at this path is the final one that points to an APK that a user should
diff --git a/src/com/facebook/buck/rules/SourcePath.java b/src/com/facebook/buck/rules/SourcePath.java
index 2e10249..cd84465 100644
--- a/src/com/facebook/buck/rules/SourcePath.java
+++ b/src/com/facebook/buck/rules/SourcePath.java
@@ -41,6 +41,8 @@
    */
   public Path resolve(BuildContext context);
 
+  public Path resolve(DependencyGraph graph);
+
   /**
    * @return a representation of path in a stable manner that does not involve calling {#resolve()}
    */
diff --git a/test/com/facebook/buck/android/AndroidBinaryRuleTest.java b/test/com/facebook/buck/android/AndroidBinaryRuleTest.java
index a75bc26..26277f4 100644
--- a/test/com/facebook/buck/android/AndroidBinaryRuleTest.java
+++ b/test/com/facebook/buck/android/AndroidBinaryRuleTest.java
@@ -99,7 +99,7 @@
         .addClasspathDep(libraryTwo.getBuildTarget())
         .addBuildRuleToExcludeFromDex(
             BuildTargetFactory.newInstance("//java/src/com/facebook/base:libraryTwo"))
-        .setManifest("java/src/com/facebook/base/AndroidManifest.xml")
+        .setManifest(new FileSourcePath("java/src/com/facebook/base/AndroidManifest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(addKeystoreRule(ruleResolver))
         .setPackageType("debug"));
@@ -177,7 +177,7 @@
         .setBuildTarget(binaryBuildTarget)
         .addClasspathDep(libraryOne.getBuildTarget())
         .addClasspathDep(libraryTwo.getBuildTarget())
-        .setManifest("java/src/com/facebook/base/AndroidManifest.xml")
+        .setManifest(new FileSourcePath("java/src/com/facebook/base/AndroidManifest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(addKeystoreRule(ruleResolver))
         .setPackageType("debug"));
@@ -236,7 +236,7 @@
         .setBuildTarget(binaryBuildTarget)
         .addClasspathDep(libraryOne.getBuildTarget())
         .addClasspathDep(libraryTwo.getBuildTarget())
-        .setManifest("java/src/com/facebook/base/AndroidManifest.xml")
+        .setManifest(new FileSourcePath("java/src/com/facebook/base/AndroidManifest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(addKeystoreRule(ruleResolver))
         .setPackageType("debug"));
@@ -306,7 +306,7 @@
         .setBuildTarget(binaryBuildTarget)
         .addClasspathDep(libraryOne.getBuildTarget())
         .addClasspathDep(libraryTwo.getBuildTarget())
-        .setManifest("java/src/com/facebook/base/AndroidManifest.xml")
+        .setManifest(new FileSourcePath("java/src/com/facebook/base/AndroidManifest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(addKeystoreRule(ruleResolver))
         .setPackageType("debug"));
@@ -413,7 +413,7 @@
     AndroidBinaryRule.Builder androidBinaryRuleBuilder = AndroidBinaryRule
         .newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//java/src/com/facebook:app"))
-        .setManifest("java/src/com/facebook/AndroidManifest.xml")
+        .setManifest(new FileSourcePath("java/src/com/facebook/AndroidManifest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(addKeystoreRule(ruleResolver));
 
@@ -448,7 +448,7 @@
     AndroidBinaryRule ruleInRootDirectory = ruleResolver.buildAndAddToIndex(
         AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//:fb4a"))
-        .setManifest("AndroidManifest.xml")
+        .setManifest(new FileSourcePath("AndroidManifest.xml"))
         .setKeystore(keystoreTarget)
         .setTarget("Google Inc.:Google APIs:16"));
     assertEquals(GEN_DIR + "/fb4a.apk", ruleInRootDirectory.getApkPath());
@@ -456,7 +456,7 @@
     AndroidBinaryRule ruleInNonRootDirectory = ruleResolver.buildAndAddToIndex(
         AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//java/com/example:fb4a"))
-        .setManifest("AndroidManifest.xml")
+        .setManifest(new FileSourcePath("AndroidManifest.xml"))
         .setKeystore(keystoreTarget)
         .setTarget("Google Inc.:Google APIs:16"));
     assertEquals(GEN_DIR + "/java/com/example/fb4a.apk", ruleInNonRootDirectory.getApkPath());
@@ -469,7 +469,7 @@
     AndroidBinaryRule rule = ruleResolver.buildAndAddToIndex(
         AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//:fbandroid_with_dash_debug_fbsign"))
-        .setManifest("AndroidManifest.xml")
+        .setManifest(new FileSourcePath("AndroidManifest.xml"))
         .setKeystore(addKeystoreRule(ruleResolver))
         .setTarget("Google Inc.:Google APIs:16"));
 
@@ -499,7 +499,7 @@
     AndroidBinaryRule splitDexRule = ruleResolver.buildAndAddToIndex(
         AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//:fbandroid_with_dash_debug_fbsign"))
-        .setManifest("AndroidManifest.xml")
+        .setManifest(new FileSourcePath("AndroidManifest.xml"))
         .setKeystore(addKeystoreRule(ruleResolver))
         .setTarget("Google Inc.:Google APIs:16")
         .setDexSplitMode(new DexSplitMode(
@@ -571,7 +571,7 @@
     AndroidBinaryRule.Builder builder = AndroidBinaryRule.newAndroidBinaryRuleBuilder(
         new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//:target"))
-        .setManifest("AndroidManifest.xml")
+        .setManifest(new FileSourcePath("AndroidManifest.xml"))
         .setKeystore(addKeystoreRule(resolver))
         .setTarget("Google Inc:Google APIs:16")
         .setResourceFilter(new ResourceFilter(ImmutableList.<String>of("mdpi")))
@@ -623,7 +623,7 @@
     AndroidBinaryRule.Builder builder = AndroidBinaryRule.newAndroidBinaryRuleBuilder(
         new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//:fbandroid_with_dash_debug_fbsign"))
-        .setManifest("AndroidManifest.xml")
+        .setManifest(new FileSourcePath("AndroidManifest.xml"))
         .setKeystore(addKeystoreRule(ruleResolver))
         .setTarget("Google Inc:Google APIs:16");
 
diff --git a/test/com/facebook/buck/android/AndroidResourceRuleTest.java b/test/com/facebook/buck/android/AndroidResourceRuleTest.java
index f403be9..2480d94 100644
--- a/test/com/facebook/buck/android/AndroidResourceRuleTest.java
+++ b/test/com/facebook/buck/android/AndroidResourceRuleTest.java
@@ -28,6 +28,7 @@
 import com.facebook.buck.rules.DependencyGraph;
 import com.facebook.buck.rules.FakeAbstractBuildRuleBuilderParams;
 import com.facebook.buck.rules.FakeBuildRuleParams;
+import com.facebook.buck.rules.FileSourcePath;
 import com.facebook.buck.testutil.MoreAsserts;
 import com.facebook.buck.testutil.RuleMap;
 import com.google.common.collect.ImmutableList;
@@ -150,7 +151,7 @@
     AndroidBinaryRule e = ruleResolver.buildAndAddToIndex(
         AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//:e"))
-        .setManifest("AndroidManfiest.xml")
+        .setManifest(new FileSourcePath("AndroidManfiest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(keystoreTarget)
         .addDep(BuildTargetFactory.newInstance("//:a"))
diff --git a/test/com/facebook/buck/android/AndroidTransitiveDependencyGraphTest.java b/test/com/facebook/buck/android/AndroidTransitiveDependencyGraphTest.java
index c1de5ba..799f08c 100644
--- a/test/com/facebook/buck/android/AndroidTransitiveDependencyGraphTest.java
+++ b/test/com/facebook/buck/android/AndroidTransitiveDependencyGraphTest.java
@@ -28,6 +28,7 @@
 import com.facebook.buck.rules.BuildRuleResolver;
 import com.facebook.buck.rules.DependencyGraph;
 import com.facebook.buck.rules.FakeAbstractBuildRuleBuilderParams;
+import com.facebook.buck.rules.FileSourcePath;
 import com.facebook.buck.testutil.RuleMap;
 import com.facebook.buck.util.BuckConstant;
 import com.google.common.collect.ImmutableSet;
@@ -101,7 +102,7 @@
         .addClasspathDep(libraryRule.getBuildTarget())
         .addClasspathDep(manifestRule.getBuildTarget())
         .addBuildRuleToExcludeFromDex(BuildTargetFactory.newInstance("//third_party/guava:guava"))
-        .setManifest("java/src/com/facebook/AndroidManifest.xml")
+        .setManifest(new FileSourcePath("java/src/com/facebook/AndroidManifest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(keystoreTarget));
 
@@ -182,7 +183,7 @@
     AndroidBinaryRule androidBinaryRule = ruleResolver.buildAndAddToIndex(
         AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(new BuildTarget("//apps/sample", "app"))
-        .setManifest("apps/sample/AndroidManifest.xml")
+        .setManifest(new FileSourcePath("apps/sample/AndroidManifest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(keystoreTarget)
         .addClasspathDep(androidLibraryTarget));
diff --git a/test/com/facebook/buck/android/ApkGenruleTest.java b/test/com/facebook/buck/android/ApkGenruleTest.java
index fb3276a..097e3b3 100644
--- a/test/com/facebook/buck/android/ApkGenruleTest.java
+++ b/test/com/facebook/buck/android/ApkGenruleTest.java
@@ -26,19 +26,20 @@
 import com.facebook.buck.model.BuildTarget;
 import com.facebook.buck.model.BuildTargetFactory;
 import com.facebook.buck.model.BuildTargetPattern;
-import com.facebook.buck.rules.BuildRuleFactoryParams;
 import com.facebook.buck.parser.BuildTargetParser;
 import com.facebook.buck.parser.NoSuchBuildTargetException;
-import com.facebook.buck.rules.NonCheckingBuildRuleFactoryParams;
 import com.facebook.buck.parser.ParseContext;
 import com.facebook.buck.rules.ArtifactCache;
 import com.facebook.buck.rules.BuildContext;
+import com.facebook.buck.rules.BuildRuleFactoryParams;
 import com.facebook.buck.rules.BuildRuleResolver;
 import com.facebook.buck.rules.BuildRuleType;
 import com.facebook.buck.rules.DependencyGraph;
 import com.facebook.buck.rules.FakeAbstractBuildRuleBuilderParams;
 import com.facebook.buck.rules.FakeBuildableContext;
+import com.facebook.buck.rules.FileSourcePath;
 import com.facebook.buck.rules.JavaPackageFinder;
+import com.facebook.buck.rules.NonCheckingBuildRuleFactoryParams;
 import com.facebook.buck.shell.ShellStep;
 import com.facebook.buck.step.ExecutionContext;
 import com.facebook.buck.step.Step;
@@ -99,7 +100,7 @@
     ruleResolver.buildAndAddToIndex(
         AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//:fb4a"))
-        .setManifest("AndroidManifest.xml")
+        .setManifest(new FileSourcePath("AndroidManifest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(keystoreTarget)
         .addDep(libAndroidTarget)
diff --git a/test/com/facebook/buck/cli/AuditClasspathCommandTest.java b/test/com/facebook/buck/cli/AuditClasspathCommandTest.java
index 8f31a96..5a95997 100644
--- a/test/com/facebook/buck/cli/AuditClasspathCommandTest.java
+++ b/test/com/facebook/buck/cli/AuditClasspathCommandTest.java
@@ -33,6 +33,7 @@
 import com.facebook.buck.rules.BuildRuleResolver;
 import com.facebook.buck.rules.DependencyGraph;
 import com.facebook.buck.rules.FakeAbstractBuildRuleBuilderParams;
+import com.facebook.buck.rules.FileSourcePath;
 import com.facebook.buck.rules.KnownBuildRuleTypes;
 import com.facebook.buck.rules.NoopArtifactCache;
 import com.facebook.buck.testutil.BuckTestConstant;
@@ -125,7 +126,7 @@
     ruleResolver.buildAndAddToIndex(
         AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//:test-android-binary"))
-        .setManifest("AndroidManifest.xml")
+        .setManifest(new FileSourcePath("AndroidManifest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(keystoreBuildTarget)
         .addClasspathDep(BuildTargetFactory.newInstance("//:test-android-library"))
diff --git a/test/com/facebook/buck/command/ProjectTest.java b/test/com/facebook/buck/command/ProjectTest.java
index 78e1e61..0ff32a8 100644
--- a/test/com/facebook/buck/command/ProjectTest.java
+++ b/test/com/facebook/buck/command/ProjectTest.java
@@ -41,6 +41,7 @@
 import com.facebook.buck.rules.BuildRuleResolver;
 import com.facebook.buck.rules.DependencyGraph;
 import com.facebook.buck.rules.FakeAbstractBuildRuleBuilderParams;
+import com.facebook.buck.rules.FileSourcePath;
 import com.facebook.buck.rules.JavaPackageFinder;
 import com.facebook.buck.rules.ProjectConfigRule;
 import com.facebook.buck.step.ExecutionContext;
@@ -184,7 +185,7 @@
         AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//foo:app"))
         .addClasspathDep(BuildTargetFactory.newInstance("//java/src/com/facebook/base:base"))
-        .setManifest("foo/AndroidManifest.xml")
+        .setManifest(new FileSourcePath("foo/AndroidManifest.xml"))
         .setTarget("Google Inc.:Google APIs:16")
         .setKeystore(keystoreTarget)
         .addBuildRuleToExcludeFromDex(BuildTargetFactory.newInstance("//third_party/guava:guava")));
@@ -200,7 +201,7 @@
         AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams())
         .setBuildTarget(BuildTargetFactory.newInstance("//bar:app"))
         .addClasspathDep(BuildTargetFactory.newInstance("//java/src/com/facebook/base:base"))
-            .setManifest("foo/AndroidManifest.xml")
+            .setManifest(new FileSourcePath("foo/AndroidManifest.xml"))
             .setTarget("Google Inc.:Google APIs:16")
             .setKeystore(keystoreTarget));
 
