aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-02-02 10:07:36 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-02-02 14:59:00 +0000
commit852e9e5cc9ca4ad10a8097ba2dc74cc4446dade8 (patch)
tree949f9b967f48125b6836820603bf539ea954656a
parent8a2d077f0f440b3555f20ae7b5a1c709b74d65f6 (diff)
Remove the AndroidBuilder from the processResources call. This allows use more
freedom in generating the command line for aapt. -- MOS_MIGRATED_REVID=113614675
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java20
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessor.java222
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/AndroidSdkTools.java130
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/BazelPlatformTarget.java235
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/BuildToolInfoBuilder.java65
5 files changed, 199 insertions, 473 deletions
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 e0b21f4abf..31bbdbfae5 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.OptionsBase;
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 @@ public class AndroidResourceProcessingAction {
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 @@ public class AndroidResourceProcessingAction {
.addAll(options.transitiveData)
.build()
.asList();
- final AndroidBuilder builder = sdkTools.createAndroidBuilder();
final MergedAndroidData mergedData = resourceProcessor.mergeData(
options.primaryData,
@@ -332,7 +324,8 @@ public class AndroidResourceProcessingAction {
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 @@ public class AndroidResourceProcessingAction {
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 @@ public class AndroidResourceProcessingAction {
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 c06c77f7c9..6865d69905 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 static java.nio.charset.StandardCharsets.UTF_8;
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 @@ public class AndroidResourceProcessor {
/**
* 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 @@ public class AndroidResourceProcessor {
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 @@ public class AndroidResourceProcessor {
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 @@ public class AndroidResourceProcessor {
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 @@ public class AndroidResourceProcessor {
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 @@ public class AndroidResourceProcessor {
}
}
}
+
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 5a1ccc6201..0000000000
--- 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 6f30c4b997..0000000000
--- 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 ccd72cfd78..0000000000
--- 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);
- }
-}