From: Dianne Hackborn Date: Sat, 19 May 2012 02:22:14 +0000 (-0700) Subject: Add aapt support for generating proguard rules for onClick methods. X-Git-Url: https://git.saurik.com/android/aapt.git/commitdiff_plain/8d0084d3b2878ffe092396cabf778c2114675dd2?ds=sidebyside Add aapt support for generating proguard rules for onClick methods. Also fix Activity menu inflater when using the dark on light theme wrapper to still be able to find onClick listeners. Change-Id: Ie206db26d1df96041bc477804e476b02ad99dc9d --- diff --git a/Resource.cpp b/Resource.cpp index b9ec30c..a69adc1 100644 --- a/Resource.cpp +++ b/Resource.cpp @@ -2089,6 +2089,23 @@ addProguardKeepRule(ProguardKeepSet* keep, const String8& inClassName, keep->add(rule, location); } +void +addProguardKeepMethodRule(ProguardKeepSet* keep, const String8& memberName, + const char* pkg, const String8& srcName, int line) +{ + String8 rule("-keepclassmembers class * { *** "); + rule += memberName; + rule += "(...); }"; + + String8 location("onClick "); + location += srcName; + char lineno[20]; + sprintf(lineno, ":%d", line); + location += lineno; + + keep->add(rule, location); +} + status_t writeProguardForAndroidManifest(ProguardKeepSet* keep, const sp& assets) { @@ -2251,6 +2268,13 @@ writeProguardForXml(ProguardKeepSet* keep, const sp& layoutFile, } } } + ssize_t attrIndex = tree.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, "onClick"); + if (attrIndex >= 0) { + size_t len; + addProguardKeepMethodRule(keep, + String8(tree.getAttributeStringValue(attrIndex, &len)), NULL, + layoutFile->getPrintableSource(), tree.getLineNumber()); + } } return NO_ERROR; @@ -2289,6 +2313,9 @@ writeProguardForLayouts(ProguardKeepSet* keep, const sp& assets) } else if ((dirName == String8("xml")) || (strncmp(dirName.string(), "xml-", 4) == 0)) { startTag = "PreferenceScreen"; tagAttrPairs = &kXmlTagAttrPairs; + } else if ((dirName == String8("menu")) || (strncmp(dirName.string(), "menu-", 5) == 0)) { + startTag = "menu"; + tagAttrPairs = NULL; } else { continue; }