AAPT: Add flag to disable versioning of vector related XML
AAPT automatically versions XML files according to the SDK level
in which their attributes were introduced. Support libraries
know how to handle resources built against newer SDKs, so offer
the option to disable some of the automatic versioning, namely
vectors.
Bug:19336994
Change-Id: I9f9d0ae8f2a0c28404f82e27de416f80e38493c9
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index c5fccbf..3b146da 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -4611,6 +4611,9 @@
const String16& resourceName,
const sp<AaptFile>& target,
const sp<XMLNode>& root) {
+ const String16 vector16("vector");
+ const String16 animatedVector16("animated-vector");
+
const int minSdk = getMinSdkVersion(bundle);
if (minSdk >= SDK_LOLLIPOP_MR1) {
// Lollipop MR1 and up handles public attributes differently, no
@@ -4620,8 +4623,8 @@
const ConfigDescription config(target->getGroupEntry().toParams());
if (target->getResourceType() == "" || config.sdkVersion >= SDK_LOLLIPOP_MR1) {
- // Skip resources that have no type (AndroidManifest.xml) or are already version qualified with v21
- // or higher.
+ // Skip resources that have no type (AndroidManifest.xml) or are already version qualified
+ // with v21 or higher.
return NO_ERROR;
}
@@ -4635,6 +4638,12 @@
sp<XMLNode> node = nodesToVisit.top();
nodesToVisit.pop();
+ if (bundle->getNoVersionVectors() && (node->getElementName() == vector16 ||
+ node->getElementName() == animatedVector16)) {
+ // We were told not to version vector tags, so skip the children here.
+ continue;
+ }
+
const Vector<XMLNode::attribute_entry>& attrs = node->getAttributes();
for (size_t i = 0; i < attrs.size(); i++) {
const XMLNode::attribute_entry& attr = attrs[i];