Remove the AndroidBuilder from the processResources call. This allows use more
freedom in generating the command line for aapt.

--
MOS_MIGRATED_REVID=113614675
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java
index e0b21f4..31bbdbf 100644
--- a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java
+++ b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java
@@ -31,9 +31,10 @@
 import com.google.devtools.common.options.OptionsParser;
 import com.google.devtools.common.options.TriState;
 
-import com.android.builder.core.AndroidBuilder;
 import com.android.builder.core.VariantConfiguration;
 import com.android.builder.model.AaptOptions;
+import com.android.ide.common.internal.AaptCruncher;
+import com.android.ide.common.internal.CommandLineRunner;
 import com.android.ide.common.internal.LoggedErrorException;
 import com.android.ide.common.res2.MergingException;
 import com.android.sdklib.repository.FullRevision;
@@ -288,14 +289,6 @@
     final AndroidResourceProcessor resourceProcessor =
         new AndroidResourceProcessor(STD_LOGGER);
 
-    final AndroidSdkTools sdkTools = new AndroidSdkTools(options.apiVersion,
-        options.aapt,
-        options.annotationJar,
-        options.adb,
-        options.zipAlign,
-        options.androidJar,
-        STD_LOGGER);
-
     try {
 
       Path expandedOut = Files.createTempDirectory("tmp-expanded");
@@ -324,7 +317,6 @@
               .addAll(options.transitiveData)
               .build()
               .asList();
-      final AndroidBuilder builder = sdkTools.createAndroidBuilder();
 
       final MergedAndroidData mergedData = resourceProcessor.mergeData(
           options.primaryData,
@@ -332,7 +324,8 @@
           mergedResources,
           mergedAssets,
           modifiers,
-          useAaptCruncher() ? builder.getAaptCruncher() : null,
+          useAaptCruncher() ?  new AaptCruncher(options.aapt.toString(),
+              new CommandLineRunner(STD_LOGGER)) : null,
           true);
 
       LOGGER.fine(String.format("Merging finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS)));
@@ -345,7 +338,8 @@
           String.format("Density filtering finished at %sms",
               timer.elapsed(TimeUnit.MILLISECONDS)));
       resourceProcessor.processResources(
-          builder,
+          options.aapt,
+          options.androidJar,
           options.packageType,
           options.debug,
           options.packageForR,
@@ -411,7 +405,7 @@
       if (!options.uncompressedExtensions.isEmpty()) {
         return options.uncompressedExtensions;
       }
-      return null;
+      return ImmutableList.of();
     }
 
     @Override
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessor.java b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessor.java
index c06c77f..6865d69 100644
--- a/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessor.java
+++ b/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessor.java
@@ -17,13 +17,17 @@
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Throwables;
+import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Multimap;
 
 import com.android.annotations.Nullable;
-import com.android.builder.core.AndroidBuilder;
 import com.android.builder.core.VariantConfiguration;
 import com.android.builder.dependency.SymbolFileProvider;
+import com.android.builder.internal.SymbolLoader;
+import com.android.builder.internal.SymbolWriter;
 import com.android.builder.model.AaptOptions;
+import com.android.ide.common.internal.CommandLineRunner;
 import com.android.ide.common.internal.LoggedErrorException;
 import com.android.ide.common.internal.PngCruncher;
 import com.android.ide.common.res2.AssetMerger;
@@ -124,10 +128,10 @@
 
   /**
    * Processes resources for generated sources, configs and packaging resources.
-   * @param manifestOut TODO(corysmith):
    */
   public void processResources(
-      AndroidBuilder builder,
+      Path aapt,
+      Path androidJar,
       VariantConfiguration.Type variantType,
       boolean debug,
       String customPackageForR,
@@ -139,16 +143,20 @@
       MergedAndroidData primaryData,
       List<DependencyAndroidData> dependencyData,
       Path workingDirectory,
-      @Nullable Path sourceOut,
-      @Nullable Path packageOut,
-      @Nullable Path proguardOut,
-      @Nullable Path manifestOut) throws IOException, InterruptedException, LoggedErrorException {
-    ImmutableList.Builder<SymbolFileProvider> libraries = ImmutableList.builder();
+      Path sourceOut,
+      Path packageOut,
+      Path proguardOut,
+      Path manifestOut) throws IOException, InterruptedException, LoggedErrorException {
+    List<SymbolFileProvider> libraries = new ArrayList<>();
+    List<String> packages = new ArrayList<>();
     for (DependencyAndroidData dataDep : dependencyData) {
-      libraries.add(dataDep.asSymbolFileProvider());
+      SymbolFileProvider library = dataDep.asSymbolFileProvider();
+      libraries.add(library);
+      packages.add(VariantConfiguration.getManifestPackage(library.getManifest()));
     }
 
-    File androidManifest = processManifest(
+    Path androidManifest = processManifest(
+
         variantType == VariantConfiguration.Type.DEFAULT ? applicationId : customPackageForR,
         versionCode,
         versionName,
@@ -157,22 +165,118 @@
         variantType == VariantConfiguration.Type.DEFAULT
             ? ManifestMerger2.MergeType.APPLICATION : ManifestMerger2.MergeType.LIBRARY);
 
-    builder.processResources(
-        androidManifest,
-        primaryData.getResourceDirFile(),
-        primaryData.getAssetDirFile(),
-        libraries.build(),
-        customPackageForR,
-        prepareOutputPath(sourceOut),
-        prepareOutputPath(sourceOut),
-        packageOut != null ? packageOut.toString() : null,
-        proguardOut != null ? proguardOut.toString() : null,
-        variantType,
-        debug,
-        aaptOptions,
-        resourceConfigs,
-        true // boolean enforceUniquePackageName
-        );
+    File resFolder = primaryData.getResourceDirFile();
+    File assetsDir = primaryData.getAssetDirFile();
+
+    List<String> command = new ArrayList<>();
+    
+    command.add(aapt.toString());
+    command.add("package");
+    
+    // Trigger the aapt logging level on the Logger.
+    if (stdLogger.getLevel() == StdLogger.Level.VERBOSE) {
+        command.add("-v");
+    }
+    
+    // Overwrite existing files, if they exist.
+    command.add("-f");
+    
+    // Resources are precrunched in the merge process.
+    command.add("--no-crunch");
+    
+    // Add the android.jar as a base input.
+    command.add("-I");
+    command.add(androidJar.toString());
+
+    // Add the manifest for validation.
+    command.add("-M");
+    command.add(androidManifest.toAbsolutePath().toString());
+
+    if (resFolder.isDirectory()) {
+      command.add("-S");
+      command.add(resFolder.getAbsolutePath());
+    }
+
+    if (assetsDir != null && assetsDir.isDirectory()) {
+      command.add("-A");
+      command.add(assetsDir.getAbsolutePath());
+    }
+
+    // Outputs
+    if (sourceOut != null) {
+      prepareOutputPath(sourceOut);
+      command.add("-m");
+      command.add("-J");
+      command.add(sourceOut.toString());
+      command.add("--output-text-symbols");
+      command.add(sourceOut.toString());
+    }
+
+    if (packageOut != null) {
+      command.add("-F");
+      command.add(packageOut.toString());
+    }
+
+    if (proguardOut != null) {
+      command.add("-G");
+      command.add(proguardOut.toString());
+    }
+    
+    // Additional options.
+    if (debug) {
+      command.add("--debug-mode");
+    }
+
+    if (customPackageForR != null) {
+      command.add("--custom-package");
+      command.add(customPackageForR);
+      stdLogger.verbose("Custom package for R class: '%s'", customPackageForR);
+    }
+
+    // If it is a library, do not generate final java ids.
+    if (variantType == VariantConfiguration.Type.LIBRARY) {
+      command.add("--non-constant-id");
+    }
+
+    if (variantType == VariantConfiguration.Type.DEFAULT) {
+      // Generate the dependent R and Manifest files.
+      command.add("--extra-packages");
+      command.add(Joiner.on(":").join(packages));
+    }
+
+    if (aaptOptions.getIgnoreAssets() != null) {
+      command.add("--ignore-assets");
+      command.add(aaptOptions.getIgnoreAssets());
+    }
+
+    if (aaptOptions.getFailOnMissingConfigEntry()) {
+      command.add("--error-on-missing-config-entry");
+    }
+
+    // Never compress apks.
+    command.add("-0");
+    command.add("apk");
+
+    // Add custom no-compress extensions.
+    for (String noCompress : aaptOptions.getNoCompress()) {
+      command.add("-0");
+      command.add(noCompress);
+    }
+
+    // Filter by resource configuration type.
+    if (!resourceConfigs.isEmpty()) {
+      command.add("-c");
+      command.add(Joiner.on(',').join(resourceConfigs));
+    }
+
+    new CommandLineRunner(stdLogger).runCmdLine(command, null);
+
+    // The R needs to be created for each library in the dependencies,
+    // but only if the current project is not a library.
+    writeDependencyPackageRs(variantType, customPackageForR, libraries, androidManifest.toFile(),
+        sourceOut);
+
+    // Reset the output date stamps.
     if (proguardOut != null) {
       Files.setLastModifiedTime(proguardOut, FileTime.fromMillis(0L));
     }
@@ -180,12 +284,69 @@
       Files.setLastModifiedTime(packageOut, FileTime.fromMillis(0L));
     }
     if (manifestOut != null) {
-      Files.copy(androidManifest.toPath(), manifestOut);
+      Files.copy(androidManifest, manifestOut);
+
       Files.setLastModifiedTime(manifestOut, FileTime.fromMillis(0L));
     }
   }
 
-  private File processManifest(
+  private void writeDependencyPackageRs(VariantConfiguration.Type variantType,
+      String customPackageForR, List<SymbolFileProvider> libraries, File androidManifest,
+      Path sourceOut) throws IOException {
+    if (sourceOut != null && variantType != VariantConfiguration.Type.LIBRARY
+        && !libraries.isEmpty()) {
+      SymbolLoader fullSymbolValues = null;
+
+      String appPackageName = customPackageForR;
+      if (appPackageName == null) {
+        appPackageName = VariantConfiguration.getManifestPackage(androidManifest);
+      }
+
+      // List of all the symbol loaders per package names.
+      Multimap<String, SymbolLoader> libMap = ArrayListMultimap.create();
+
+      for (SymbolFileProvider lib : libraries) {
+        String packageName = VariantConfiguration.getManifestPackage(lib.getManifest());
+
+        // If the library package matches the app package skip -- the R class will contain
+        // all the possible resources so it will not need to generate a new R.
+        if (appPackageName.equals(packageName)) {
+          continue;
+        }
+
+        File rFile = lib.getSymbolFile();
+        // If the library has no resource, this file won't exist.
+        if (rFile.isFile()) {
+          // Load the full values if that's not already been done.
+          // Doing it lazily allow us to support the case where there's no
+          // resources anywhere.
+          if (fullSymbolValues == null) {
+            fullSymbolValues = new SymbolLoader(sourceOut.resolve("R.txt").toFile(), stdLogger);
+            fullSymbolValues.load();
+          }
+
+          SymbolLoader libSymbols = new SymbolLoader(rFile, stdLogger);
+          libSymbols.load();
+
+          // store these symbols by associating them with the package name.
+          libMap.put(packageName, libSymbols);
+        }
+      }
+
+      // Loop on all the package name, merge all the symbols to write, and write.
+      for (String packageName : libMap.keySet()) {
+        Collection<SymbolLoader> symbols = libMap.get(packageName);
+        SymbolWriter writer = new SymbolWriter(sourceOut.toString(), packageName, fullSymbolValues);
+        for (SymbolLoader symbolLoader : symbols) {
+          writer.addSymbolsToWrite(symbolLoader);
+        }
+        writer.write();
+      }
+    }
+  }
+
+  private Path processManifest(
+
       String newManifestPackage,
       int versionCode,
       String versionName,
@@ -236,9 +397,9 @@
           IOException | SAXException | ParserConfigurationException | MergeFailureException e) {
         Throwables.propagate(e);
       }
-      return androidManifest.toFile();
+      return androidManifest;
     }
-    return primaryData.getManifestFile();
+    return primaryData.getManifestFile().toPath();
   }
 
   private void writeMergedManifest(MergingReport mergingReport,
@@ -404,3 +565,4 @@
     }
   }
 }
+
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidSdkTools.java b/src/tools/android/java/com/google/devtools/build/android/AndroidSdkTools.java
deleted file mode 100644
index 5a1ccc6..0000000
--- a/src/tools/android/java/com/google/devtools/build/android/AndroidSdkTools.java
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright 2015 The Bazel Authors. All rights reserved.
-//
-// 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.google.devtools.build.android;
-
-import com.google.common.base.Preconditions;
-
-import com.android.builder.core.AndroidBuilder;
-import com.android.builder.sdk.SdkInfo;
-import com.android.builder.sdk.TargetInfo;
-import com.android.sdklib.AndroidVersion;
-import com.android.sdklib.BuildToolInfo;
-import com.android.sdklib.IAndroidTarget;
-import com.android.sdklib.repository.FullRevision;
-import com.android.utils.StdLogger;
-
-import java.io.File;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.nio.file.Path;
-
-import javax.annotation.Nullable;
-
-/**
- * Encapsulates the sdk related tools necessary for creating an AndroidBuilder.
- */
-public class AndroidSdkTools {
-  private final FullRevision apiVersion;
-
-  private final Path aaptLocation;
-
-  private final Path annotationJar;
-
-  private final Path adbLocation;
-
-  private final Path zipAlign;
-  private final Path androidJar;
-
-  private StdLogger stdLogger;
-
-  public AndroidSdkTools(FullRevision apiVersion,
-      Path aaptLocation,
-      Path annotationJar,
-      @Nullable Path adbLocation,
-      @Nullable Path zipAlign,
-      Path androidJar,
-      StdLogger stdLogger) {
-    this.stdLogger = stdLogger;
-    this.apiVersion = Preconditions.checkNotNull(apiVersion, "apiVersion");
-    this.aaptLocation = Preconditions.checkNotNull(aaptLocation, "aapt");
-    this.annotationJar = Preconditions.checkNotNull(annotationJar, "annotationJar");
-    this.adbLocation = adbLocation;
-    this.zipAlign = zipAlign;
-    this.androidJar = Preconditions.checkNotNull(androidJar, "androidJar");
-  }
-
-  /** Creates an AndroidBuilder from the provided sdk tools. */
-  public AndroidBuilder createAndroidBuilder() {
-    // BuildInfoTool contains the paths to all tools that the AndroidBuilder uses.
-    BuildToolInfo buildToolInfo =
-        new BuildToolInfoBuilder(apiVersion).setZipAlign(zipAlign).setAapt(aaptLocation).build();
-
-    BazelPlatformTarget bazelPlatformTarget = new BazelPlatformTarget(androidJar,
-        new AndroidVersion(apiVersion.getMajor(), ""), buildToolInfo);
-
-    AndroidBuilder builder = new AndroidBuilder(
-        "bazel",  /* project id */
-        "bazel",  /* created by */
-        stdLogger,
-        false /* verbose */);
-    TargetInfo targetInfo = createTargetInfo(buildToolInfo, bazelPlatformTarget);
-    SdkInfo sdkInfo = createSdkInfo(annotationJar, adbLocation);
-
-    // TargetInfo and sdk info provide links to all the tools.
-    builder.setTargetInfo(sdkInfo, targetInfo);
-    return builder;
-  }
-
-  private static SdkInfo createSdkInfo(Path annotationJar, Path adbLocation) {
-    try {
-      // necessary hack because SdkInfo doesn't declare a public constructor.
-      Constructor<SdkInfo> sdkInfoConstructor =
-          SdkInfo.class.getDeclaredConstructor(File.class, File.class);
-      sdkInfoConstructor.setAccessible(true);
-      return sdkInfoConstructor.newInstance(maybeToFile(annotationJar), maybeToFile(adbLocation));
-    } catch (NoSuchMethodException
-        | SecurityException
-        | InstantiationException
-        | IllegalAccessException
-        | IllegalArgumentException
-        | InvocationTargetException e) {
-      throw new AssertionError(e);
-    }
-  }
-
-  private static TargetInfo createTargetInfo(BuildToolInfo buildToolInfo,
-      BazelPlatformTarget bazelPlatformTarget) {
-    try {
-      // necessary hack because TargetInfo doesn't declare a public constructor.
-      Constructor<TargetInfo> targetInfoConstructor =
-          TargetInfo.class.getDeclaredConstructor(IAndroidTarget.class, BuildToolInfo.class);
-      targetInfoConstructor.setAccessible(true);
-      return targetInfoConstructor.newInstance(bazelPlatformTarget, buildToolInfo);
-    } catch (NoSuchMethodException
-        | SecurityException
-        | InstantiationException
-        | IllegalAccessException
-        | IllegalArgumentException
-        | InvocationTargetException e) {
-      throw new AssertionError(e);
-    }
-  }
-  
-  private static File maybeToFile(Path path) {
-    if (path == null) {
-      return null;
-    }
-    return path.toFile();
-  }
-}
\ No newline at end of file
diff --git a/src/tools/android/java/com/google/devtools/build/android/BazelPlatformTarget.java b/src/tools/android/java/com/google/devtools/build/android/BazelPlatformTarget.java
deleted file mode 100644
index 6f30c4b..0000000
--- a/src/tools/android/java/com/google/devtools/build/android/BazelPlatformTarget.java
+++ /dev/null
@@ -1,235 +0,0 @@
-// Copyright 2015 The Bazel Authors. All rights reserved.
-//
-// 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.google.devtools.build.android;
-
-import com.android.SdkConstants;
-import com.android.sdklib.AndroidTargetHash;
-import com.android.sdklib.AndroidVersion;
-import com.android.sdklib.BuildToolInfo;
-import com.android.sdklib.IAndroidTarget;
-import com.android.sdklib.ISystemImage;
-import com.android.sdklib.repository.descriptors.IdDisplay;
-
-import java.io.File;
-import java.nio.file.Path;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Defines a target platform used by Bazel builds.
- */
-public class BazelPlatformTarget implements IAndroidTarget {
-
-  private final BuildToolInfo buildToolInfo;
-  private final Map<Integer, Path> paths = new HashMap<>();
-  private final AndroidVersion version;
-  private final Path sdkRoot;
-
-  public BazelPlatformTarget(
-      Path androidJar,
-      AndroidVersion version,
-      BuildToolInfo buildToolInfo) {
-    this.version = version;
-    this.buildToolInfo = buildToolInfo;
-    
-    sdkRoot = new File("unused/tool/from/sdk/root").toPath();
-    // pre-build the path to the platform components with default values
-    // TODO(bazel-team): Allow overrides of the default values.
-    paths.put(ANDROID_JAR, androidJar);
-    paths.put(UI_AUTOMATOR_JAR, sdkRoot.resolve(SdkConstants.FN_UI_AUTOMATOR_LIBRARY));
-    paths.put(SOURCES, sdkRoot.resolve(SdkConstants.FD_ANDROID_SOURCES));
-    paths.put(ANDROID_AIDL, sdkRoot.resolve(SdkConstants.FN_FRAMEWORK_AIDL));
-    paths.put(SAMPLES, sdkRoot.resolve(SdkConstants.OS_PLATFORM_SAMPLES_FOLDER));
-    paths.put(SKINS, sdkRoot.resolve(SdkConstants.OS_SKINS_FOLDER));
-    paths.put(TEMPLATES, sdkRoot.resolve(SdkConstants.OS_PLATFORM_TEMPLATES_FOLDER));
-    paths.put(DATA, sdkRoot.resolve(SdkConstants.OS_PLATFORM_DATA_FOLDER));
-    paths.put(ATTRIBUTES, sdkRoot.resolve(SdkConstants.OS_PLATFORM_ATTRS_XML));
-    paths.put(MANIFEST_ATTRIBUTES, sdkRoot.resolve(SdkConstants.OS_PLATFORM_ATTRS_MANIFEST_XML));
-    paths.put(RESOURCES, sdkRoot.resolve(SdkConstants.OS_PLATFORM_RESOURCES_FOLDER));
-    paths.put(FONTS, sdkRoot.resolve(SdkConstants.OS_PLATFORM_FONTS_FOLDER));
-    paths.put(LAYOUT_LIB,
-        sdkRoot.resolve(SdkConstants.OS_PLATFORM_DATA_FOLDER + SdkConstants.FN_LAYOUTLIB_JAR));
-    paths.put(WIDGETS,
-        sdkRoot.resolve(SdkConstants.OS_PLATFORM_DATA_FOLDER + SdkConstants.FN_WIDGETS));
-    paths.put(ACTIONS_ACTIVITY, sdkRoot.resolve(
-        SdkConstants.OS_PLATFORM_DATA_FOLDER + SdkConstants.FN_INTENT_ACTIONS_ACTIVITY));
-    paths.put(ACTIONS_BROADCAST, sdkRoot.resolve(
-        SdkConstants.OS_PLATFORM_DATA_FOLDER + SdkConstants.FN_INTENT_ACTIONS_BROADCAST));
-    paths.put(ACTIONS_SERVICE, sdkRoot.resolve(
-        SdkConstants.OS_PLATFORM_DATA_FOLDER + SdkConstants.FN_INTENT_ACTIONS_SERVICE));
-    paths.put(CATEGORIES,
-        sdkRoot.resolve(SdkConstants.OS_PLATFORM_DATA_FOLDER + SdkConstants.FN_INTENT_CATEGORIES));
-  }
-
-  @Override
-  public int compareTo(IAndroidTarget o) {
-    if (o.isPlatform() == false) {
-      return -1;
-    }
-    return version.compareTo(o.getVersion());
-  }
-
-  @Override
-  public String getLocation() {
-    return sdkRoot.toFile().getPath();
-  }
-
-  @Override
-  public String getVendor() {
-    return "Android";
-  }
-
-  @Override
-  public String getName() {
-    return "Android [Platform Version Name] (Bazel)";
-  }
-
-  @Override
-  public String getFullName() {
-    return "Android [Platform Version Name] (Bazel)";
-  }
-
-  @Override
-  public String getClasspathName() {
-    return "Android [Platform Version Name] (Bazel)";
-  }
-
-  @Override
-  public String getShortClasspathName() {
-    return "Android [Platform Version Name] (Bazel)";
-  }
-
-  @Override
-  public String getDescription() {
-    return String.format("Standard Android platform %s", "[Platform Version Name] (Bazel)");
-  }
-
-  @Override
-  public AndroidVersion getVersion() {
-    return version;
-  }
-
-  @Override
-  public String getVersionName() {
-    return version.getCodename();
-  }
-
-  @Override
-  public int getRevision() {
-    return 0;
-  }
-
-  @Override
-  public boolean isPlatform() {
-    return true;
-  }
-
-  @Override
-  public IAndroidTarget getParent() {
-    return null;
-  }
-
-  @Override
-  public String getPath(int pathId) {
-    return paths.get(pathId).toFile().getPath();
-  }
-
-  @Override
-  public File getFile(int pathId) {
-    return new File(getPath(pathId));
-  }
-
-  @Override
-  public BuildToolInfo getBuildToolInfo() {
-    return buildToolInfo;
-  }
-
-  @Override
-  public List<String> getBootClasspath() {
-    return Collections.singletonList(getPath(IAndroidTarget.ANDROID_JAR));
-  }
-
-  @Override
-  public boolean hasRenderingLibrary() {
-    return true;
-  }
-
-  @Override
-  public File[] getSkins() {
-    return new File[0];
-  }
-
-  @Override
-  public File getDefaultSkin() {
-    return null;
-  }
-
-  @Override
-  public IOptionalLibrary[] getOptionalLibraries() {
-    return new IOptionalLibrary[0];
-  }
-
-  @Override
-  public String[] getPlatformLibraries() {
-    return new String[] { SdkConstants.ANDROID_TEST_RUNNER_LIB };
-  }
-
-  @Override
-  public String getProperty(String name) {
-    return null;
-  }
-
-  @Override
-  public Integer getProperty(String name, Integer defaultValue) {
-    return defaultValue;
-  }
-
-  @Override
-  public Boolean getProperty(String name, Boolean defaultValue) {
-    return defaultValue;
-  }
-
-  @Override
-  public Map<String, String> getProperties() {
-    return null;
-  }
-
-  @Override
-  public int getUsbVendorId() {
-    return NO_USB_ID;
-  }
-
-  @Override
-  public ISystemImage[] getSystemImages() {
-    return new ISystemImage[0];
-  }
-
-  @Override
-  public ISystemImage getSystemImage(IdDisplay tag, String abiType) {
-    return null;
-  }
-
-  @Override
-  public boolean canRunOn(IAndroidTarget target) {
-    // TODO(bazel-team): Auto-generated method stub
-    return false;
-  }
-
-  @Override
-  public String hashString() {
-    return AndroidTargetHash.getPlatformHashString(version);
-  }
-}
diff --git a/src/tools/android/java/com/google/devtools/build/android/BuildToolInfoBuilder.java b/src/tools/android/java/com/google/devtools/build/android/BuildToolInfoBuilder.java
deleted file mode 100644
index ccd72cf..0000000
--- a/src/tools/android/java/com/google/devtools/build/android/BuildToolInfoBuilder.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2015 The Bazel Authors. All rights reserved.
-//
-// 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.google.devtools.build.android;
-
-import com.android.SdkConstants;
-import com.android.sdklib.BuildToolInfo;
-import com.android.sdklib.repository.FullRevision;
-
-import java.io.File;
-import java.nio.file.Path;
-
-import javax.annotation.Nullable;
-
-/**
- * Simplifies the creation of a {@link BuildToolInfo}.
- */
-public class BuildToolInfoBuilder {
-  private File aaptLocation;
-  private FullRevision fullRevision;
-  private File zipAlign;
-
-  public BuildToolInfoBuilder(FullRevision fullRevision) {
-    this.fullRevision = fullRevision;
-  }
-
-  public BuildToolInfoBuilder setAapt(@Nullable Path aaptLocation) {
-    this.aaptLocation = aaptLocation != null ? aaptLocation.toFile() : null;
-    return this;
-  }
-
-  public BuildToolInfoBuilder setZipAlign(@Nullable Path zipAlign) {
-    this.zipAlign = zipAlign != null ? zipAlign.toFile() : null;
-    return this;
-  }
-
-  public BuildToolInfo build() {
-    // Fill in the unused tools with fakes that will make sense if unexpectedly called.
-    Path platformToolsRoot = new File("unused/path/to/sdk/root").toPath();
-    return new BuildToolInfo(fullRevision,
-        platformToolsRoot.toFile(),
-        aaptLocation,
-        platformToolsRoot.resolve(SdkConstants.FN_AIDL).toFile(),
-        platformToolsRoot.resolve(SdkConstants.FN_DX).toFile(),
-        platformToolsRoot.resolve(SdkConstants.FN_DX_JAR).toFile(),
-        platformToolsRoot.resolve(SdkConstants.FN_RENDERSCRIPT).toFile(),
-        platformToolsRoot.resolve(SdkConstants.FN_FRAMEWORK_INCLUDE).toFile(),
-        platformToolsRoot.resolve(SdkConstants.FN_FRAMEWORK_INCLUDE_CLANG).toFile(),
-        platformToolsRoot.resolve(SdkConstants.FN_BCC_COMPAT).toFile(),
-        platformToolsRoot.resolve(SdkConstants.FN_LD_ARM).toFile(),
-        platformToolsRoot.resolve(SdkConstants.FN_LD_X86).toFile(),
-        platformToolsRoot.resolve(SdkConstants.FN_LD_MIPS).toFile(),
-        zipAlign == null ? platformToolsRoot.resolve(SdkConstants.FN_ZIPALIGN).toFile() : zipAlign);
-  }
-}