summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Lesinski <adamlesinski@google.com>2017-10-18 00:57:26 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-10-18 00:57:26 +0000
commitf60d30b6829b84223c680b7b6f9669975c708a27 (patch)
tree6f814f8c62c11a128af5b1c28c53a0bf1d247ed9
parenta3edc551c0b7873f5843b3b1dda89b20ae74f950 (diff)
parent3bdfe1a2517c4e2b6e9c7b7fe6b91eff77e4bd00 (diff)
Merge "AAPT2: Flatten AndroidManifest.xml stringpool in UTF16" into oc-mr1-dev
am: 3bdfe1a251 Change-Id: I3295e61dcf29a7cb242b4ee0017f2fd94a0cfd65
-rw-r--r--tools/aapt2/cmd/Link.cpp8
-rw-r--r--tools/aapt2/flatten/XmlFlattener.cpp6
-rw-r--r--tools/aapt2/flatten/XmlFlattener.h4
3 files changed, 14 insertions, 4 deletions
diff --git a/tools/aapt2/cmd/Link.cpp b/tools/aapt2/cmd/Link.cpp
index d9e7ac6c1e08..7742f36f1610 100644
--- a/tools/aapt2/cmd/Link.cpp
+++ b/tools/aapt2/cmd/Link.cpp
@@ -251,10 +251,11 @@ class FeatureSplitSymbolTableDelegate : public DefaultSymbolTableDelegate {
};
static bool FlattenXml(IAaptContext* context, xml::XmlResource* xml_res, const StringPiece& path,
- bool keep_raw_values, IArchiveWriter* writer) {
+ bool keep_raw_values, bool utf16, IArchiveWriter* writer) {
BigBuffer buffer(1024);
XmlFlattenerOptions options = {};
options.keep_raw_values = keep_raw_values;
+ options.use_utf16 = utf16;
XmlFlattener flattener(&buffer, options);
if (!flattener.Consume(context, xml_res)) {
return false;
@@ -599,7 +600,7 @@ bool ResourceFileFlattener::Flatten(ResourceTable* table, IArchiveWriter* archiv
}
}
error |= !FlattenXml(context_, doc.get(), dst_path, options_.keep_raw_values,
- archive_writer);
+ false /*utf16*/, archive_writer);
}
} else {
error |= !io::CopyFileToArchive(context_, file_op.file_to_copy, file_op.dst_path,
@@ -1383,7 +1384,8 @@ class LinkCommand {
bool WriteApk(IArchiveWriter* writer, proguard::KeepSet* keep_set, xml::XmlResource* manifest,
ResourceTable* table) {
const bool keep_raw_values = context_->GetPackageType() == PackageType::kStaticLib;
- bool result = FlattenXml(context_, manifest, "AndroidManifest.xml", keep_raw_values, writer);
+ bool result = FlattenXml(context_, manifest, "AndroidManifest.xml", keep_raw_values,
+ true /*utf16*/, writer);
if (!result) {
return false;
}
diff --git a/tools/aapt2/flatten/XmlFlattener.cpp b/tools/aapt2/flatten/XmlFlattener.cpp
index b3b308a29fc5..6214d70a7579 100644
--- a/tools/aapt2/flatten/XmlFlattener.cpp
+++ b/tools/aapt2/flatten/XmlFlattener.cpp
@@ -314,7 +314,11 @@ bool XmlFlattener::Flatten(IAaptContext* context, xml::Node* node) {
xml_header_writer.StartChunk<ResXMLTree_header>(RES_XML_TYPE);
// Flatten the StringPool.
- StringPool::FlattenUtf8(buffer_, visitor.pool);
+ if (options_.use_utf16) {
+ StringPool::FlattenUtf16(buffer_, visitor.pool);
+ } else {
+ StringPool::FlattenUtf8(buffer_, visitor.pool);
+ }
{
// Write the array of resource IDs, indexed by StringPool order.
diff --git a/tools/aapt2/flatten/XmlFlattener.h b/tools/aapt2/flatten/XmlFlattener.h
index 87557f29f3be..9e436acfa36a 100644
--- a/tools/aapt2/flatten/XmlFlattener.h
+++ b/tools/aapt2/flatten/XmlFlattener.h
@@ -30,6 +30,10 @@ struct XmlFlattenerOptions {
* Keep attribute raw string values along with typed values.
*/
bool keep_raw_values = false;
+
+ // Encode the strings in UTF-16. Only needed for AndroidManifest.xml to avoid a bug in
+ // certain non-AOSP platforms: https://issuetracker.google.com/64434571
+ bool use_utf16 = false;
};
class XmlFlattener : public IXmlResourceConsumer {