aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-07-21 17:16:02 +0000
committerGravatar John Cater <jcater@google.com>2016-07-21 20:37:31 +0000
commit1f57a04bda7ad449bda187d897a7ff846b5e5946 (patch)
tree2610d6782bedb37c6b922b77f076d411f8e3f5c0 /src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java
parent3bdb4c33d314e1e710f619f28ad9d30b98d08297 (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.java131
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() {