diff --git a/tools/aapt2/flatten/XmlFlattener.cpp b/tools/aapt2/flatten/XmlFlattener.cpp index 3c1750c6151fa..ed5b60fe6f051 100644 --- a/tools/aapt2/flatten/XmlFlattener.cpp +++ b/tools/aapt2/flatten/XmlFlattener.cpp @@ -88,9 +88,14 @@ struct XmlFlattenerVisitor : public xml::Visitor { } void visit(xml::Namespace* node) override { - writeNamespace(node, android::RES_XML_START_NAMESPACE_TYPE); - xml::Visitor::visit(node); - writeNamespace(node, android::RES_XML_END_NAMESPACE_TYPE); + if (node->namespaceUri == xml::kSchemaTools) { + // Skip dedicated tools namespace. + xml::Visitor::visit(node); + } else { + writeNamespace(node, android::RES_XML_START_NAMESPACE_TYPE); + xml::Visitor::visit(node); + writeNamespace(node, android::RES_XML_END_NAMESPACE_TYPE); + } } void visit(xml::Text* node) override { @@ -183,6 +188,9 @@ struct XmlFlattenerVisitor : public xml::Visitor { continue; } } + if (attr.namespaceUri == xml::kSchemaTools) { + continue; + } mFilteredAttrs.push_back(&attr); } diff --git a/tools/aapt2/flatten/XmlFlattener_test.cpp b/tools/aapt2/flatten/XmlFlattener_test.cpp index 8b3378f3106d0..d26f2e4ab7eaa 100644 --- a/tools/aapt2/flatten/XmlFlattener_test.cpp +++ b/tools/aapt2/flatten/XmlFlattener_test.cpp @@ -167,6 +167,33 @@ TEST_F(XmlFlattenerTest, FlattenCompiledXmlAndStripSdk21) { EXPECT_EQ(uint32_t(0x010103b3), tree.getAttributeNameResID(0)); } +TEST_F(XmlFlattenerTest, FlattenCompiledXmlAndStripOnlyTools) { + std::unique_ptr doc = test::buildXmlDom(R"EOF( + )EOF"); + + android::ResXMLTree tree; + ASSERT_TRUE(flatten(doc.get(), &tree)); + + ASSERT_EQ(tree.next(), android::ResXMLTree::START_NAMESPACE); + + size_t len; + const char16_t* namespacePrefix = tree.getNamespacePrefix(&len); + EXPECT_EQ(StringPiece16(namespacePrefix, len), u"foo"); + + const char16_t* namespaceUri = tree.getNamespaceUri(&len); + ASSERT_EQ(StringPiece16(namespaceUri, len), u"http://schemas.android.com/foo"); + + ASSERT_EQ(tree.next(), android::ResXMLTree::START_TAG); + + EXPECT_EQ( + tree.indexOfAttribute("http://schemas.android.com/tools", "ignore"), + android::NAME_NOT_FOUND); + EXPECT_GE(tree.indexOfAttribute("http://schemas.android.com/foo", "bar"), 0); +} + TEST_F(XmlFlattenerTest, AssignSpecialAttributeIndices) { std::unique_ptr doc = test::buildXmlDom(R"EOF(