Merge "AAPT2: Flatten AndroidManifest.xml stringpool in UTF16" into oc-mr1-dev

This commit is contained in:
TreeHugger Robot
2017-10-18 00:51:00 +00:00
committed by Android (Google) Code Review
3 changed files with 14 additions and 4 deletions

View File

@@ -251,10 +251,11 @@ class FeatureSplitSymbolTableDelegate : public DefaultSymbolTableDelegate {
}; };
static bool FlattenXml(IAaptContext* context, xml::XmlResource* xml_res, const StringPiece& path, 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); BigBuffer buffer(1024);
XmlFlattenerOptions options = {}; XmlFlattenerOptions options = {};
options.keep_raw_values = keep_raw_values; options.keep_raw_values = keep_raw_values;
options.use_utf16 = utf16;
XmlFlattener flattener(&buffer, options); XmlFlattener flattener(&buffer, options);
if (!flattener.Consume(context, xml_res)) { if (!flattener.Consume(context, xml_res)) {
return false; return false;
@@ -599,7 +600,7 @@ bool ResourceFileFlattener::Flatten(ResourceTable* table, IArchiveWriter* archiv
} }
} }
error |= !FlattenXml(context_, doc.get(), dst_path, options_.keep_raw_values, error |= !FlattenXml(context_, doc.get(), dst_path, options_.keep_raw_values,
archive_writer); false /*utf16*/, archive_writer);
} }
} else { } else {
error |= !io::CopyFileToArchive(context_, file_op.file_to_copy, file_op.dst_path, 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, bool WriteApk(IArchiveWriter* writer, proguard::KeepSet* keep_set, xml::XmlResource* manifest,
ResourceTable* table) { ResourceTable* table) {
const bool keep_raw_values = context_->GetPackageType() == PackageType::kStaticLib; 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) { if (!result) {
return false; return false;
} }

View File

@@ -314,7 +314,11 @@ bool XmlFlattener::Flatten(IAaptContext* context, xml::Node* node) {
xml_header_writer.StartChunk<ResXMLTree_header>(RES_XML_TYPE); xml_header_writer.StartChunk<ResXMLTree_header>(RES_XML_TYPE);
// Flatten the StringPool. // Flatten the StringPool.
if (options_.use_utf16) {
StringPool::FlattenUtf16(buffer_, visitor.pool);
} else {
StringPool::FlattenUtf8(buffer_, visitor.pool); StringPool::FlattenUtf8(buffer_, visitor.pool);
}
{ {
// Write the array of resource IDs, indexed by StringPool order. // Write the array of resource IDs, indexed by StringPool order.

View File

@@ -30,6 +30,10 @@ struct XmlFlattenerOptions {
* Keep attribute raw string values along with typed values. * Keep attribute raw string values along with typed values.
*/ */
bool keep_raw_values = false; 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 { class XmlFlattener : public IXmlResourceConsumer {