Loading tools/aapt/Resource.cpp +31 −17 Original line number Original line Diff line number Diff line Loading @@ -2210,7 +2210,7 @@ struct NamespaceAttributePair { status_t status_t writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile, writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile, const char* startTag, const KeyedVector<String8, NamespaceAttributePair>* tagAttrPairs) const char* startTag, const KeyedVector<String8, Vector<NamespaceAttributePair> >* tagAttrPairs) { { status_t err; status_t err; ResXMLTree tree; ResXMLTree tree; Loading Loading @@ -2254,7 +2254,10 @@ writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile, } else if (tagAttrPairs != NULL) { } else if (tagAttrPairs != NULL) { ssize_t tagIndex = tagAttrPairs->indexOfKey(tag); ssize_t tagIndex = tagAttrPairs->indexOfKey(tag); if (tagIndex >= 0) { if (tagIndex >= 0) { const NamespaceAttributePair& nsAttr = tagAttrPairs->valueAt(tagIndex); const Vector<NamespaceAttributePair>& nsAttrVector = tagAttrPairs->valueAt(tagIndex); for (size_t i = 0; i < nsAttrVector.size(); i++) { const NamespaceAttributePair& nsAttr = nsAttrVector[i]; ssize_t attrIndex = tree.indexOfAttribute(nsAttr.ns, nsAttr.attr); ssize_t attrIndex = tree.indexOfAttribute(nsAttr.ns, nsAttr.attr); if (attrIndex < 0) { if (attrIndex < 0) { // fprintf(stderr, "%s:%d: <%s> does not have attribute %s:%s.\n", // fprintf(stderr, "%s:%d: <%s> does not have attribute %s:%s.\n", Loading @@ -2268,6 +2271,7 @@ writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile, } } } } } } } ssize_t attrIndex = tree.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, "onClick"); ssize_t attrIndex = tree.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, "onClick"); if (attrIndex >= 0) { if (attrIndex >= 0) { size_t len; size_t len; Loading @@ -2280,9 +2284,18 @@ writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile, return NO_ERROR; return NO_ERROR; } } static void addTagAttrPair(KeyedVector<String8, NamespaceAttributePair>* dest, static void addTagAttrPair(KeyedVector<String8, Vector<NamespaceAttributePair> >* dest, const char* tag, const char* ns, const char* attr) { const char* tag, const char* ns, const char* attr) { dest->add(String8(tag), NamespaceAttributePair(ns, attr)); String8 tagStr(tag); ssize_t index = dest->indexOfKey(tagStr); if (index < 0) { Vector<NamespaceAttributePair> vector; vector.add(NamespaceAttributePair(ns, attr)); dest->add(tagStr, vector); } else { dest->editValueAt(index).add(NamespaceAttributePair(ns, attr)); } } } status_t status_t Loading @@ -2291,13 +2304,13 @@ writeProguardForLayouts(ProguardKeepSet* keep, const sp<AaptAssets>& assets) status_t err; status_t err; // tag:attribute pairs that should be checked in layout files. // tag:attribute pairs that should be checked in layout files. KeyedVector<String8, NamespaceAttributePair> kLayoutTagAttrPairs; KeyedVector<String8, Vector<NamespaceAttributePair> > kLayoutTagAttrPairs; addTagAttrPair(&kLayoutTagAttrPairs, "view", NULL, "class"); addTagAttrPair(&kLayoutTagAttrPairs, "view", NULL, "class"); addTagAttrPair(&kLayoutTagAttrPairs, "fragment", NULL, "class"); addTagAttrPair(&kLayoutTagAttrPairs, "fragment", NULL, "class"); addTagAttrPair(&kLayoutTagAttrPairs, "fragment", RESOURCES_ANDROID_NAMESPACE, "name"); addTagAttrPair(&kLayoutTagAttrPairs, "fragment", RESOURCES_ANDROID_NAMESPACE, "name"); // tag:attribute pairs that should be checked in xml files. // tag:attribute pairs that should be checked in xml files. KeyedVector<String8, NamespaceAttributePair> kXmlTagAttrPairs; KeyedVector<String8, Vector<NamespaceAttributePair> > kXmlTagAttrPairs; addTagAttrPair(&kXmlTagAttrPairs, "PreferenceScreen", RESOURCES_ANDROID_NAMESPACE, "fragment"); addTagAttrPair(&kXmlTagAttrPairs, "PreferenceScreen", RESOURCES_ANDROID_NAMESPACE, "fragment"); addTagAttrPair(&kXmlTagAttrPairs, "header", RESOURCES_ANDROID_NAMESPACE, "fragment"); addTagAttrPair(&kXmlTagAttrPairs, "header", RESOURCES_ANDROID_NAMESPACE, "fragment"); Loading @@ -2307,7 +2320,7 @@ writeProguardForLayouts(ProguardKeepSet* keep, const sp<AaptAssets>& assets) const sp<AaptDir>& d = dirs.itemAt(k); const sp<AaptDir>& d = dirs.itemAt(k); const String8& dirName = d->getLeaf(); const String8& dirName = d->getLeaf(); const char* startTag = NULL; const char* startTag = NULL; const KeyedVector<String8, NamespaceAttributePair>* tagAttrPairs = NULL; const KeyedVector<String8, Vector<NamespaceAttributePair> >* tagAttrPairs = NULL; if ((dirName == String8("layout")) || (strncmp(dirName.string(), "layout-", 7) == 0)) { if ((dirName == String8("layout")) || (strncmp(dirName.string(), "layout-", 7) == 0)) { tagAttrPairs = &kLayoutTagAttrPairs; tagAttrPairs = &kLayoutTagAttrPairs; } else if ((dirName == String8("xml")) || (strncmp(dirName.string(), "xml-", 4) == 0)) { } else if ((dirName == String8("xml")) || (strncmp(dirName.string(), "xml-", 4) == 0)) { Loading Loading @@ -2339,6 +2352,7 @@ writeProguardForLayouts(ProguardKeepSet* keep, const sp<AaptAssets>& assets) if (overlay.get()) { if (overlay.get()) { return writeProguardForLayouts(keep, overlay); return writeProguardForLayouts(keep, overlay); } } return NO_ERROR; return NO_ERROR; } } Loading Loading
tools/aapt/Resource.cpp +31 −17 Original line number Original line Diff line number Diff line Loading @@ -2210,7 +2210,7 @@ struct NamespaceAttributePair { status_t status_t writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile, writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile, const char* startTag, const KeyedVector<String8, NamespaceAttributePair>* tagAttrPairs) const char* startTag, const KeyedVector<String8, Vector<NamespaceAttributePair> >* tagAttrPairs) { { status_t err; status_t err; ResXMLTree tree; ResXMLTree tree; Loading Loading @@ -2254,7 +2254,10 @@ writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile, } else if (tagAttrPairs != NULL) { } else if (tagAttrPairs != NULL) { ssize_t tagIndex = tagAttrPairs->indexOfKey(tag); ssize_t tagIndex = tagAttrPairs->indexOfKey(tag); if (tagIndex >= 0) { if (tagIndex >= 0) { const NamespaceAttributePair& nsAttr = tagAttrPairs->valueAt(tagIndex); const Vector<NamespaceAttributePair>& nsAttrVector = tagAttrPairs->valueAt(tagIndex); for (size_t i = 0; i < nsAttrVector.size(); i++) { const NamespaceAttributePair& nsAttr = nsAttrVector[i]; ssize_t attrIndex = tree.indexOfAttribute(nsAttr.ns, nsAttr.attr); ssize_t attrIndex = tree.indexOfAttribute(nsAttr.ns, nsAttr.attr); if (attrIndex < 0) { if (attrIndex < 0) { // fprintf(stderr, "%s:%d: <%s> does not have attribute %s:%s.\n", // fprintf(stderr, "%s:%d: <%s> does not have attribute %s:%s.\n", Loading @@ -2268,6 +2271,7 @@ writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile, } } } } } } } ssize_t attrIndex = tree.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, "onClick"); ssize_t attrIndex = tree.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, "onClick"); if (attrIndex >= 0) { if (attrIndex >= 0) { size_t len; size_t len; Loading @@ -2280,9 +2284,18 @@ writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile, return NO_ERROR; return NO_ERROR; } } static void addTagAttrPair(KeyedVector<String8, NamespaceAttributePair>* dest, static void addTagAttrPair(KeyedVector<String8, Vector<NamespaceAttributePair> >* dest, const char* tag, const char* ns, const char* attr) { const char* tag, const char* ns, const char* attr) { dest->add(String8(tag), NamespaceAttributePair(ns, attr)); String8 tagStr(tag); ssize_t index = dest->indexOfKey(tagStr); if (index < 0) { Vector<NamespaceAttributePair> vector; vector.add(NamespaceAttributePair(ns, attr)); dest->add(tagStr, vector); } else { dest->editValueAt(index).add(NamespaceAttributePair(ns, attr)); } } } status_t status_t Loading @@ -2291,13 +2304,13 @@ writeProguardForLayouts(ProguardKeepSet* keep, const sp<AaptAssets>& assets) status_t err; status_t err; // tag:attribute pairs that should be checked in layout files. // tag:attribute pairs that should be checked in layout files. KeyedVector<String8, NamespaceAttributePair> kLayoutTagAttrPairs; KeyedVector<String8, Vector<NamespaceAttributePair> > kLayoutTagAttrPairs; addTagAttrPair(&kLayoutTagAttrPairs, "view", NULL, "class"); addTagAttrPair(&kLayoutTagAttrPairs, "view", NULL, "class"); addTagAttrPair(&kLayoutTagAttrPairs, "fragment", NULL, "class"); addTagAttrPair(&kLayoutTagAttrPairs, "fragment", NULL, "class"); addTagAttrPair(&kLayoutTagAttrPairs, "fragment", RESOURCES_ANDROID_NAMESPACE, "name"); addTagAttrPair(&kLayoutTagAttrPairs, "fragment", RESOURCES_ANDROID_NAMESPACE, "name"); // tag:attribute pairs that should be checked in xml files. // tag:attribute pairs that should be checked in xml files. KeyedVector<String8, NamespaceAttributePair> kXmlTagAttrPairs; KeyedVector<String8, Vector<NamespaceAttributePair> > kXmlTagAttrPairs; addTagAttrPair(&kXmlTagAttrPairs, "PreferenceScreen", RESOURCES_ANDROID_NAMESPACE, "fragment"); addTagAttrPair(&kXmlTagAttrPairs, "PreferenceScreen", RESOURCES_ANDROID_NAMESPACE, "fragment"); addTagAttrPair(&kXmlTagAttrPairs, "header", RESOURCES_ANDROID_NAMESPACE, "fragment"); addTagAttrPair(&kXmlTagAttrPairs, "header", RESOURCES_ANDROID_NAMESPACE, "fragment"); Loading @@ -2307,7 +2320,7 @@ writeProguardForLayouts(ProguardKeepSet* keep, const sp<AaptAssets>& assets) const sp<AaptDir>& d = dirs.itemAt(k); const sp<AaptDir>& d = dirs.itemAt(k); const String8& dirName = d->getLeaf(); const String8& dirName = d->getLeaf(); const char* startTag = NULL; const char* startTag = NULL; const KeyedVector<String8, NamespaceAttributePair>* tagAttrPairs = NULL; const KeyedVector<String8, Vector<NamespaceAttributePair> >* tagAttrPairs = NULL; if ((dirName == String8("layout")) || (strncmp(dirName.string(), "layout-", 7) == 0)) { if ((dirName == String8("layout")) || (strncmp(dirName.string(), "layout-", 7) == 0)) { tagAttrPairs = &kLayoutTagAttrPairs; tagAttrPairs = &kLayoutTagAttrPairs; } else if ((dirName == String8("xml")) || (strncmp(dirName.string(), "xml-", 4) == 0)) { } else if ((dirName == String8("xml")) || (strncmp(dirName.string(), "xml-", 4) == 0)) { Loading Loading @@ -2339,6 +2352,7 @@ writeProguardForLayouts(ProguardKeepSet* keep, const sp<AaptAssets>& assets) if (overlay.get()) { if (overlay.get()) { return writeProguardForLayouts(keep, overlay); return writeProguardForLayouts(keep, overlay); } } return NO_ERROR; return NO_ERROR; } } Loading