From 852e9e5cc9ca4ad10a8097ba2dc74cc4446dade8 Mon Sep 17 00:00:00 2001 From: Googler Date: Tue, 2 Feb 2016 10:07:36 +0000 Subject: Remove the AndroidBuilder from the processResources call. This allows use more freedom in generating the command line for aapt. -- MOS_MIGRATED_REVID=113614675 --- .../android/AndroidResourceProcessingAction.java | 20 +- .../build/android/AndroidResourceProcessor.java | 222 ++++++++++++++++--- .../devtools/build/android/AndroidSdkTools.java | 130 ------------ .../build/android/BazelPlatformTarget.java | 235 --------------------- .../build/android/BuildToolInfoBuilder.java | 65 ------ 5 files changed, 199 insertions(+), 473 deletions(-) delete mode 100644 src/tools/android/java/com/google/devtools/build/android/AndroidSdkTools.java delete mode 100644 src/tools/android/java/com/google/devtools/build/android/BazelPlatformTarget.java delete mode 100644 src/tools/android/java/com/google/devtools/build/android/BuildToolInfoBuilder.java (limited to 'src') 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 dependencyData, Path workingDirectory, - @Nullable Path sourceOut, - @Nullable Path packageOut, - @Nullable Path proguardOut, - @Nullable Path manifestOut) throws IOException, InterruptedException, LoggedErrorException { - ImmutableList.Builder libraries = ImmutableList.builder(); + Path sourceOut, + Path packageOut, + Path proguardOut, + Path manifestOut) throws IOException, InterruptedException, LoggedErrorException { + List libraries = new ArrayList<>(); + List 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 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 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 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 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 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 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 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 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 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); - } -} -- cgit v1.2.3