diff options
author | 2017-11-08 20:10:36 +0100 | |
---|---|---|
committer | 2017-11-09 18:29:04 +0100 | |
commit | 743ea216879dd0e3037d4b34eff92ba8af493554 (patch) | |
tree | a56fe6988297bc022a328c911b60b2f0249e0df6 /src/tools/android/java/com/google/devtools/build | |
parent | f5a109157ed048ff253bb2ba70f3e4372ec125ba (diff) |
Fix resource shrinking to filter densities and include assets.
RELNOTES: None
PiperOrigin-RevId: 175033155
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build')
3 files changed, 35 insertions, 20 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourcePackagingAction.java b/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourcePackagingAction.java index 0a71f82119..c8946b412d 100644 --- a/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourcePackagingAction.java +++ b/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourcePackagingAction.java @@ -83,6 +83,7 @@ public class Aapt2ResourcePackagingAction { final Path tmp = scopedTmp.getPath(); final Path mergedAssets = tmp.resolve("merged_assets"); final Path mergedResources = tmp.resolve("merged_resources"); + final Path filteredResources = tmp.resolve("filtered_resources"); final Path densityManifest = tmp.resolve("manifest-filtered/AndroidManifest.xml"); @@ -92,28 +93,37 @@ public class Aapt2ResourcePackagingAction { final Path compiledResources = Files.createDirectories(tmp.resolve("compiled")); final Path linkedOut = Files.createDirectories(tmp.resolve("linked")); + final List<String> densitiesToFilter = + options.prefilteredResources.isEmpty() + ? options.densities + : Collections.<String>emptyList(); + + final List<String> densitiesForManifest = + densitiesToFilter.isEmpty() ? options.densitiesForManifest : densitiesToFilter; + profiler.recordEndOf("setup").startTask("merging"); // Checks for merge conflicts. MergedAndroidData mergedAndroidData = AndroidResourceMerger.mergeData( - options.primaryData, - options.directData, - options.transitiveData, - mergedResources, - mergedAssets, - null /* cruncher. Aapt2 automatically chooses to crunch or not. */, - options.packageType, - options.symbolsOut, - options.prefilteredResources, - false /* throwOnResourceConflict */); + options.primaryData, + options.directData, + options.transitiveData, + mergedResources, + mergedAssets, + null /* cruncher. Aapt2 automatically chooses to crunch or not. */, + options.packageType, + options.symbolsOut, + options.prefilteredResources, + false /* throwOnResourceConflict */) + .filter( + new DensitySpecificResourceFilter( + densitiesToFilter, filteredResources, mergedResources), + new DensitySpecificManifestProcessor(densitiesForManifest, densityManifest)); profiler.recordEndOf("merging"); - final List<String> densitiesToFilter = - options.prefilteredResources.isEmpty() - ? options.densities - : Collections.<String>emptyList(); + final ListeningExecutorService executorService = ExecutorServiceCloser.createDefaultService(); try (final Closeable closeable = ExecutorServiceCloser.createWith(executorService)) { profiler.startTask("compile"); @@ -127,8 +137,8 @@ public class Aapt2ResourcePackagingAction { CompiledResources compiled = options .primaryData - .processDataBindings(options.dataBindingInfoOut, options.packageForR, - databindingResourcesRoot) + .processDataBindings( + options.dataBindingInfoOut, options.packageForR, databindingResourcesRoot) .compile(compiler, compiledResources) .processManifest( manifest -> @@ -141,7 +151,7 @@ public class Aapt2ResourcePackagingAction { processedManifest)) .processManifest( manifest -> - new DensitySpecificManifestProcessor(options.densities, densityManifest) + new DensitySpecificManifestProcessor(densitiesForManifest, densityManifest) .process(manifest)); profiler.recordEndOf("compile").startTask("link"); // Write manifestOutput now before the dummy manifest is created. diff --git a/src/tools/android/java/com/google/devtools/build/android/UnvalidatedAndroidData.java b/src/tools/android/java/com/google/devtools/build/android/UnvalidatedAndroidData.java index 736c9d4ce7..032aaedd38 100644 --- a/src/tools/android/java/com/google/devtools/build/android/UnvalidatedAndroidData.java +++ b/src/tools/android/java/com/google/devtools/build/android/UnvalidatedAndroidData.java @@ -141,8 +141,7 @@ class UnvalidatedAndroidData extends UnvalidatedAndroidDirectories { false)); } - AndroidResourceOutputs.archiveDirectory( - metadataWorkingDirectory, dataBindingOut); + AndroidResourceOutputs.archiveDirectory(metadataWorkingDirectory, dataBindingOut); return new UnvalidatedAndroidData(ImmutableList.copyOf(processed), assetDirs, manifest) { @Override diff --git a/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java b/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java index 7f653d7808..309fa235ab 100644 --- a/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java +++ b/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java @@ -21,6 +21,7 @@ import com.google.common.base.Joiner; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Streams; import com.google.devtools.build.android.AaptCommandBuilder; import com.google.devtools.build.android.AndroidResourceOutputs; import com.google.devtools.build.android.Profiler; @@ -216,7 +217,12 @@ public class ResourceLinker { .when(densities.size() == 1) .thenAddRepeated("--preferred-density", densities) .add("--stable-ids", compiled.getStableIds()) - .addRepeated("-A", assetDirs.stream().map(Path::toString).collect(toList())) + .addRepeated( + "-A", + Streams.concat( + assetDirs.stream().map(Path::toString), + compiled.getAssetsStrings().stream()) + .collect(toList())) .addRepeated("-I", StaticLibrary.toPathStrings(linkAgainst)) .addRepeated( "-R", |