diff options
author | corysmith <corysmith@google.com> | 2018-02-27 09:18:27 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-02-27 09:20:03 -0800 |
commit | 7f16496cc027110d37247854115ab68e4c83baa2 (patch) | |
tree | da42e8978983c85248ade3b78a0a2591d0a7c278 /src | |
parent | d85aaea5d606c659807fff7cfef75781a59860bc (diff) |
Ensure the public.xml is included with the databound resources.
RELNOTES: None
PiperOrigin-RevId: 187185374
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/AndroidResourceProcessingAction.java | 28 |
1 files changed, 25 insertions, 3 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 12c7d7090b..45a6e62a17 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 @@ -13,6 +13,8 @@ // limitations under the License. package com.google.devtools.build.android; +import static java.util.stream.Collectors.toList; + import com.android.builder.core.VariantType; import com.android.ide.common.internal.AaptCruncher; import com.android.ide.common.internal.LoggedErrorException; @@ -44,15 +46,19 @@ import com.google.devtools.common.options.OptionsBase; import com.google.devtools.common.options.OptionsParser; import com.google.devtools.common.options.ShellQuotedParamsFilePreProcessor; import com.google.devtools.common.options.TriState; +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.regex.Pattern; import javax.annotation.Nullable; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; @@ -366,6 +372,7 @@ public class AndroidResourceProcessingAction { final Path densityManifest = tmp.resolve("manifest-filtered/AndroidManifest.xml"); final Path processedManifest = tmp.resolve("manifest-processed/AndroidManifest.xml"); final Path dummyManifest = tmp.resolve("manifest-aapt-dummy/AndroidManifest.xml"); + final Path publicXmlOut = tmp.resolve("public-resources/public.xml"); Path generatedSources = null; if (options.srcJarOutput != null || options.rOutput != null || options.symbolsOut != null) { @@ -460,9 +467,7 @@ public class AndroidResourceProcessingAction { options.packagePath, options.proguardOutput, options.mainDexProguardOutput, - options.resourcesOutput != null - ? processedData.getResourceDir().resolve("values").resolve("public.xml") - : null, + options.resourcesOutput != null ? publicXmlOut : null, options.dataBindingInfoOut); logger.fine(String.format("aapt finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS))); @@ -475,6 +480,23 @@ public class AndroidResourceProcessingAction { generatedSources, options.rOutput, VariantType.LIBRARY == options.packageType); } if (options.resourcesOutput != null) { + if (Files.exists(publicXmlOut)) { + try (BufferedReader reader = + Files.newBufferedReader(publicXmlOut, StandardCharsets.UTF_8)) { + Path publicXml = + processedAndroidData.getResourceDir().resolve("values").resolve("public.xml"); + Files.createDirectories(publicXml.getParent()); + + Pattern xmlComment = Pattern.compile("<!--.*-->"); + Files.write( + publicXml, + // Remove aapt debugging comment lines to fix hermaticity with generated files. + reader.lines().filter(l -> !xmlComment.matcher(l).find()).collect(toList()), + StandardOpenOption.CREATE, + StandardOpenOption.TRUNCATE_EXISTING); + } + } + ResourcesZip.from(processedAndroidData.getResourceDir(), processedAndroidData.getAssetDir()) .writeTo(options.resourcesOutput, false /* compress */); } |