diff options
author | 2016-07-21 17:16:02 +0000 | |
---|---|---|
committer | 2016-07-21 20:37:31 +0000 | |
commit | 1f57a04bda7ad449bda187d897a7ff846b5e5946 (patch) | |
tree | 2610d6782bedb37c6b922b77f076d411f8e3f5c0 /src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java | |
parent | 3bdb4c33d314e1e710f619f28ad9d30b98d08297 (diff) |
5 of 5: Integrate with the AndroidResourceProcessor
--
MOS_MIGRATED_REVID=128074515
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java | 131 |
1 files changed, 61 insertions, 70 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 17c4822cbe..14f43f9b25 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 @@ -15,10 +15,16 @@ package com.google.devtools.build.android; import static java.nio.charset.StandardCharsets.UTF_8; +import com.android.builder.core.VariantConfiguration; +import com.android.builder.core.VariantConfiguration.Type; +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.internal.PngCruncher; +import com.android.ide.common.res2.MergingException; +import com.android.utils.StdLogger; import com.google.common.base.Stopwatch; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import com.google.common.hash.Hashing; import com.google.devtools.build.android.AndroidResourceProcessor.AaptConfigOptions; import com.google.devtools.build.android.AndroidResourceProcessor.FlagAaptOptions; import com.google.devtools.build.android.Converters.DependencyAndroidDataListConverter; @@ -31,26 +37,13 @@ import com.google.devtools.common.options.Option; 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.VariantConfiguration; -import com.android.builder.core.VariantConfiguration.Type; -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.internal.PngCruncher; -import com.android.ide.common.res2.MergingException; -import com.android.utils.StdLogger; - import java.io.IOException; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; - /** * Provides an entry point for the resource processing using the AOSP build tools. * @@ -76,7 +69,7 @@ public class AndroidResourceProcessingAction { private static final StdLogger STD_LOGGER = new StdLogger(com.android.utils.StdLogger.Level.WARNING); - private static final Logger LOGGER = + private static final Logger logger = Logger.getLogger(AndroidResourceProcessingAction.class.getName()); /** Flag specifications for this action. */ @@ -217,15 +210,10 @@ public class AndroidResourceProcessingAction { aaptConfigOptions = optionsParser.getOptions(AaptConfigOptions.class); options = optionsParser.getOptions(Options.class); - FileSystem fileSystem = FileSystems.getDefault(); - Path working = fileSystem.getPath("").toAbsolutePath(); final AndroidResourceProcessor resourceProcessor = new AndroidResourceProcessor(STD_LOGGER); - try (ScopedTemporaryDirectory scopedTmp = new ScopedTemporaryDirectory("android_resources_tmp")) { final Path tmp = scopedTmp.getPath(); - final Path expandedOut = tmp.resolve("tmp-expanded"); - final Path deduplicatedOut = tmp.resolve("tmp-deduplicated"); final Path mergedAssets = tmp.resolve("merged_assets"); final Path mergedResources = tmp.resolve("merged_resources"); final Path filteredResources = tmp.resolve("resources-filtered"); @@ -234,19 +222,14 @@ public class AndroidResourceProcessingAction { final Path dummyManifest = tmp.resolve("manifest-aapt-dummy/AndroidManifest.xml"); Path generatedSources = null; - if (options.srcJarOutput != null || options.rOutput != null + if (options.srcJarOutput != null + || options.rOutput != null || options.symbolsTxtOut != null) { generatedSources = tmp.resolve("generated_resources"); } - LOGGER.fine(String.format("Setup finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS))); + logger.fine(String.format("Setup finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS))); - final ImmutableList<DirectoryModifier> modifiers = ImmutableList.of( - new PackedResourceTarExpander(expandedOut, working), - new FileDeDuplicator(Hashing.murmur3_128(), deduplicatedOut, working)); - - // Resources can appear in both the direct dependencies and transitive -- use a set to - // ensure depeduplication. List<DependencyAndroidData> data = ImmutableSet.<DependencyAndroidData>builder() .addAll(options.directData) @@ -254,32 +237,38 @@ public class AndroidResourceProcessingAction { .build() .asList(); - final MergedAndroidData mergedData = resourceProcessor.mergeData( - options.primaryData, - data, - mergedResources, - mergedAssets, - modifiers, - selectPngCruncher(), - true); - - LOGGER.fine(String.format("Merging finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS))); - - final DensityFilteredAndroidData filteredData = mergedData.filter( - new DensitySpecificResourceFilter(options.densities, filteredResources, mergedResources), - new DensitySpecificManifestProcessor(options.densities, densityManifest)); - - LOGGER.fine(String.format("Density filtering finished at %sms", - timer.elapsed(TimeUnit.MILLISECONDS))); - - MergedAndroidData processedData = resourceProcessor.processManifest( - options.packageType, - options.packageForR, - options.applicationId, - options.versionCode, - options.versionName, - filteredData, - processedManifest); + final MergedAndroidData mergedData = + resourceProcessor.mergeData( + options.primaryData, + options.directData, + options.transitiveData, + mergedResources, + mergedAssets, + selectPngCruncher(), + options.packageType, + options.symbolsTxtOut); + + logger.fine(String.format("Merging finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS))); + + final DensityFilteredAndroidData filteredData = + mergedData.filter( + new DensitySpecificResourceFilter( + options.densities, filteredResources, mergedResources), + new DensitySpecificManifestProcessor(options.densities, densityManifest)); + + logger.fine( + String.format( + "Density filtering finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS))); + + MergedAndroidData processedData = + resourceProcessor.processManifest( + options.packageType, + options.packageForR, + options.applicationId, + options.versionCode, + options.versionName, + filteredData, + processedManifest); // Write manifestOutput now before the dummy manifest is created. if (options.manifestOutput != null) { @@ -318,42 +307,44 @@ public class AndroidResourceProcessingAction { options.resourcesOutput != null ? processedData.getResourceDir().resolve("values").resolve("public.xml") : null); - LOGGER.fine(String.format("aapt finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS))); + logger.fine(String.format("aapt finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS))); if (options.srcJarOutput != null) { - resourceProcessor.createSrcJar(generatedSources, options.srcJarOutput, + resourceProcessor.createSrcJar( + generatedSources, + options.srcJarOutput, VariantConfiguration.Type.LIBRARY == options.packageType); } if (options.rOutput != null) { - resourceProcessor.copyRToOutput(generatedSources, options.rOutput, - VariantConfiguration.Type.LIBRARY == options.packageType); - } - if (options.symbolsTxtOut != null) { - resourceProcessor.copyRToOutput(generatedSources, options.symbolsTxtOut, + resourceProcessor.copyRToOutput( + generatedSources, + options.rOutput, VariantConfiguration.Type.LIBRARY == options.packageType); } if (options.resourcesOutput != null) { - resourceProcessor.createResourcesZip(processedData.getResourceDir(), - processedData.getAssetDir(), options.resourcesOutput); + resourceProcessor.createResourcesZip( + processedData.getResourceDir(), + processedData.getAssetDir(), + options.resourcesOutput); } - LOGGER.fine(String.format("Packaging finished at %sms", - timer.elapsed(TimeUnit.MILLISECONDS))); + logger.fine( + String.format("Packaging finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS))); } catch (MergingException e) { - LOGGER.log(java.util.logging.Level.SEVERE, "Error during merging resources", e); + logger.log(java.util.logging.Level.SEVERE, "Error during merging resources", e); throw e; } catch (IOException | InterruptedException | LoggedErrorException | UnrecognizedSplitsException e) { - LOGGER.log(java.util.logging.Level.SEVERE, "Error during processing resources", e); + logger.log(java.util.logging.Level.SEVERE, "Error during processing resources", e); throw e; } catch (Exception e) { - LOGGER.log(java.util.logging.Level.SEVERE, "Unexpected", e); + logger.log(java.util.logging.Level.SEVERE, "Unexpected", e); throw e; } finally { resourceProcessor.shutdown(); } - LOGGER.fine(String.format("Resources processed in %sms", timer.elapsed(TimeUnit.MILLISECONDS))); + logger.fine(String.format("Resources processed in %sms", timer.elapsed(TimeUnit.MILLISECONDS))); } private static boolean usePngCruncher() { |