diff options
Diffstat (limited to 'src')
5 files changed, 64 insertions, 66 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 61b1634325..eace6b6dda 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 @@ -117,12 +117,13 @@ public class Aapt2ResourcePackagingAction { profiler.startTask("compile"); - final ResourceCompiler compiler = - ResourceCompiler.create( - executorService, - compiledResources, - aaptConfigOptions.aapt2, - aaptConfigOptions.buildToolsVersion); + final ResourceCompiler compiler = + ResourceCompiler.create( + executorService, + compiledResources, + aaptConfigOptions.aapt2, + aaptConfigOptions.buildToolsVersion, + aaptConfigOptions.generatePseudoLocale); CompiledResources compiled = options diff --git a/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourceShrinkingAction.java b/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourceShrinkingAction.java index 79a1e78ba3..d515fbbe3b 100644 --- a/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourceShrinkingAction.java +++ b/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourceShrinkingAction.java @@ -76,7 +76,8 @@ public class Aapt2ResourceShrinkingAction { executorService, workingResourcesDirectory, aapt2ConfigOptions.aapt2, - aapt2ConfigOptions.buildToolsVersion); + aapt2ConfigOptions.buildToolsVersion, + aapt2ConfigOptions.generatePseudoLocale); profiler.recordEndOf("setup").startTask("compile"); final ResourcesZip resourcesZip = diff --git a/src/tools/android/java/com/google/devtools/build/android/CompileLibraryResourcesAction.java b/src/tools/android/java/com/google/devtools/build/android/CompileLibraryResourcesAction.java index ea0306ba40..9b95e54312 100644 --- a/src/tools/android/java/com/google/devtools/build/android/CompileLibraryResourcesAction.java +++ b/src/tools/android/java/com/google/devtools/build/android/CompileLibraryResourcesAction.java @@ -14,12 +14,11 @@ package com.google.devtools.build.android; -import com.android.repository.Revision; import com.google.common.base.Preconditions; import com.google.devtools.build.android.Converters.ExistingPathConverter; import com.google.devtools.build.android.Converters.PathConverter; -import com.google.devtools.build.android.Converters.RevisionConverter; import com.google.devtools.build.android.Converters.UnvalidatedAndroidDirectoriesConverter; +import com.google.devtools.build.android.aapt2.Aapt2ConfigOptions; import com.google.devtools.build.android.aapt2.ResourceCompiler; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; @@ -62,28 +61,6 @@ public class CompileLibraryResourcesAction { @Option( documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, effectTags = {OptionEffectTag.UNKNOWN}, - name = "aapt2", - defaultValue = "null", - converter = ExistingPathConverter.class, - category = "tool", - help = "Aapt2 tool location for resource compilation." - ) - public Path aapt2; - - @Option( - documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, - effectTags = {OptionEffectTag.UNKNOWN}, - name = "buildToolsVersion", - defaultValue = "null", - converter = RevisionConverter.class, - category = "config", - help = "Version of the build tools (e.g. aapt) being used, e.g. 23.0.2" - ) - public Revision buildToolsVersion; - - @Option( - documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, - effectTags = {OptionEffectTag.UNKNOWN}, name = "packagePath", defaultValue = "null", category = "input", @@ -118,21 +95,24 @@ public class CompileLibraryResourcesAction { + " This value is required for processing data binding." ) public Path dataBindingInfoOut; + } static final Logger logger = Logger.getLogger(CompileLibraryResourcesAction.class.getName()); public static void main(String[] args) throws Exception { - OptionsParser optionsParser = OptionsParser.newOptionsParser(Options.class); + OptionsParser optionsParser = + OptionsParser.newOptionsParser(Options.class, Aapt2ConfigOptions.class); optionsParser.enableParamsFileSupport( new ShellQuotedParamsFilePreProcessor(FileSystems.getDefault())); optionsParser.parseAndExitUponError(args); Options options = optionsParser.getOptions(Options.class); + Aapt2ConfigOptions aapt2Options = optionsParser.getOptions(Aapt2ConfigOptions.class); Preconditions.checkNotNull(options.resources); Preconditions.checkNotNull(options.output); - Preconditions.checkNotNull(options.aapt2); + Preconditions.checkNotNull(aapt2Options.aapt2); try (ExecutorServiceCloser executorService = ExecutorServiceCloser.createWithFixedPoolOf(15); ScopedTemporaryDirectory scopedTmp = @@ -144,7 +124,11 @@ public class CompileLibraryResourcesAction { final ResourceCompiler compiler = ResourceCompiler.create( - executorService, compiledResources, options.aapt2, options.buildToolsVersion); + executorService, + compiledResources, + aapt2Options.aapt2, + aapt2Options.buildToolsVersion, + aapt2Options.generatePseudoLocale); options .resources .toData(options.manifest) diff --git a/src/tools/android/java/com/google/devtools/build/android/aapt2/Aapt2ConfigOptions.java b/src/tools/android/java/com/google/devtools/build/android/aapt2/Aapt2ConfigOptions.java index c96bd8fc75..3a9aca84c3 100644 --- a/src/tools/android/java/com/google/devtools/build/android/aapt2/Aapt2ConfigOptions.java +++ b/src/tools/android/java/com/google/devtools/build/android/aapt2/Aapt2ConfigOptions.java @@ -175,4 +175,14 @@ public class Aapt2ConfigOptions extends OptionsBase { help = "Generate the resource table as a protocol buffer." ) public boolean resourceTableAsProto; + + @Option( + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + name = "generatePseudoLocale", + defaultValue = "false", + category = "config", + help = "Whether to generate pseudo locales during compilation." + ) + public boolean generatePseudoLocale; } diff --git a/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceCompiler.java b/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceCompiler.java index 4d7bb6a492..b845536e21 100644 --- a/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceCompiler.java +++ b/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceCompiler.java @@ -82,16 +82,19 @@ public class ResourceCompiler { private final Path compiledResourcesOut; private final Path aapt2; private final Revision buildToolsVersion; + private final boolean generatePseudoLocale; private CompileTask( Path file, Path compiledResourcesOut, Path aapt2, - Revision buildToolsVersion) { + Revision buildToolsVersion, + boolean generatePseudoLocale) { this.file = file; this.compiledResourcesOut = compiledResourcesOut; this.aapt2 = aapt2; this.buildToolsVersion = buildToolsVersion; + this.generatePseudoLocale = generatePseudoLocale; } @Override @@ -103,6 +106,8 @@ public class ResourceCompiler { .add("compile") .add("-v") .add("--legacy") + .when(generatePseudoLocale) + .thenAdd("--pseudo-localize") .add("-o", compiledResourcesOut.toString()) .add(file.toString()) .execute("Compiling " + file)); @@ -150,8 +155,7 @@ public class ResourceCompiler { XmlResourceValues.iterateAttributesFrom(rootElement); if (attributeIterator.hasNext()) { - results.add( - createAttributesProto(type, filename, attributeIterator)); + results.add(createAttributesProto(type, filename, attributeIterator)); } } finally { if (xmlEventReader != null) { @@ -171,10 +175,7 @@ public class ResourceCompiler { } private Path createAttributesProto( - String type, - String filename, - Iterator<Attribute> attributeIterator) - throws IOException { + String type, String filename, Iterator<Attribute> attributeIterator) throws IOException { AndroidDataSerializer serializer = AndroidDataSerializer.create(); final Path resourcesAttributesPath = @@ -188,10 +189,7 @@ public class ResourceCompiler { QName qName = new QName(namespaceUri, localPart, prefix); Namespaces namespaces = Namespaces.from(qName); - String attributeName = - namespaceUri.isEmpty() - ? localPart - : prefix + ":" + localPart; + String attributeName = namespaceUri.isEmpty() ? localPart : prefix + ":" + localPart; final String[] dirNameAndQualifiers = type.split(SdkConstants.RES_QUALIFIER_SEP); Factory fqnFactory = Factory.fromDirectoryName(dirNameAndQualifiers); @@ -222,16 +220,19 @@ public class ResourceCompiler { private final List<ListenableFuture<List<Path>>> tasks = new ArrayList<>(); private final Path aapt2; private final Revision buildToolsVersion; + private final boolean generatePseudoLocale; public CompilingVisitor( ListeningExecutorService executorService, Path compiledResources, Path aapt2, - Revision buildToolsVersion) { + Revision buildToolsVersion, + boolean generatePseudoLocale) { this.executorService = executorService; this.compiledResources = compiledResources; this.aapt2 = aapt2; this.buildToolsVersion = buildToolsVersion; + this.generatePseudoLocale = generatePseudoLocale; } @Override @@ -240,39 +241,38 @@ public class ResourceCompiler { if (!Files.isDirectory(file) && !file.getFileName().toString().startsWith(".")) { // Creates a relative output path based on the input path under the // compiledResources path. - Path outputDirectory = Files.createDirectories( - compiledResources.resolve( - (file.isAbsolute() ? file.getRoot().relativize(file) : file) - .getParent() - .getParent())); + Path outputDirectory = + Files.createDirectories( + compiledResources.resolve( + (file.isAbsolute() ? file.getRoot().relativize(file) : file) + .getParent() + .getParent())); String resFolder = file.getParent().getFileName().toString().toLowerCase(); // Aapt cannot interpret these regions so we rename them to get them to compile - String renamedResFolder = resFolder - .replaceFirst("sr[_\\-]r?latn", "b+sr+Latn") - .replaceFirst("es[_\\-]r?419", "b+es+419"); + String renamedResFolder = + resFolder + .replaceFirst("sr[_\\-]r?latn", "b+sr+Latn") + .replaceFirst("es[_\\-]r?419", "b+es+419"); if (!renamedResFolder.equals(resFolder)) { - file = Files.copy( - file, - Files.createDirectories( - outputDirectory.resolve(renamedResFolder)) - .resolve(file.getFileName())); + file = + Files.copy( + file, + Files.createDirectories(outputDirectory.resolve(renamedResFolder)) + .resolve(file.getFileName())); } tasks.add( executorService.submit( new CompileTask( - file, - outputDirectory, - aapt2, - buildToolsVersion))); + file, outputDirectory, aapt2, buildToolsVersion, generatePseudoLocale))); } return super.visitFile(file, attrs); } - List<Path> getCompiledArtifacts() throws InterruptedException, ExecutionException { + List<Path> getCompiledArtifacts() { Builder<Path> builder = ImmutableList.builder(); List<Throwable> compilationErrors = new ArrayList<>(); for (ListenableFuture<List<Path>> task : tasks) { @@ -294,9 +294,11 @@ public class ResourceCompiler { ListeningExecutorService executorService, Path compiledResources, Path aapt2, - Revision buildToolsVersion) { + Revision buildToolsVersion, + boolean generatePseudoLocale) { return new ResourceCompiler( - new CompilingVisitor(executorService, compiledResources, aapt2, buildToolsVersion)); + new CompilingVisitor( + executorService, compiledResources, aapt2, buildToolsVersion, generatePseudoLocale)); } private ResourceCompiler(CompilingVisitor compilingVisitor) { |