From: Ying Wang Date: Wed, 13 Jan 2010 22:18:11 +0000 (-0800) Subject: Add instrumentation as a source tag for proguard keep options. X-Git-Url: https://git.saurik.com/android/aapt.git/commitdiff_plain/87e7a47ba1e96211bc7f5a440ccedc9d0ab516c2?ds=inline;hp=--cc Add instrumentation as a source tag for proguard keep options. --- 87e7a47ba1e96211bc7f5a440ccedc9d0ab516c2 diff --git a/Resource.cpp b/Resource.cpp index 02b46aa..e2aeddf 100644 --- a/Resource.cpp +++ b/Resource.cpp @@ -1727,51 +1727,59 @@ writeProguardForAndroidManifest(ProguardKeepSet* keep, const sp& ass depth++; String8 tag(tree.getElementName(&len)); // printf("Depth %d tag %s\n", depth, tag.string()); + bool keepTag = false; if (depth == 1) { if (tag != "manifest") { fprintf(stderr, "ERROR: manifest does not start with tag\n"); return -1; } pkg = getAttribute(tree, NULL, "package", NULL); - } else if (depth == 2 && tag == "application") { - inApplication = true; - } - if (inApplication) { - if (tag == "application" || tag == "activity" || tag == "service" || tag == "receiver" - || tag == "provider") { - String8 name = getAttribute(tree, "http://schemas.android.com/apk/res/android", - "name", &error); - if (error != "") { - fprintf(stderr, "ERROR: %s\n", error.string()); - return -1; + } else if (depth == 2) { + if (tag == "application") { + inApplication = true; + keepTag = true; + } else if (tag == "instrumentation") { + keepTag = true; + } + } + if (!keepTag && inApplication && depth == 3) { + if (tag == "activity" || tag == "service" || tag == "receiver" || tag == "provider") { + keepTag = true; + } + } + if (keepTag) { + String8 name = getAttribute(tree, "http://schemas.android.com/apk/res/android", + "name", &error); + if (error != "") { + fprintf(stderr, "ERROR: %s\n", error.string()); + return -1; + } + if (name.length() > 0) { + // asdf --> package.asdf + // .asdf .a.b --> package.asdf package.a.b + // asdf.adsf --> asdf.asdf + String8 rule("-keep class "); + const char* p = name.string(); + const char* q = strchr(p, '.'); + if (p == q) { + rule += pkg; + rule += name; + } else if (q == NULL) { + rule += pkg; + rule += "."; + rule += name; + } else { + rule += name; } - if (name.length() > 0) { - // asdf --> package.asdf - // .asdf .a.b --> package.asdf package.a.b - // asdf.adsf --> asdf.asdf - String8 rule("-keep class "); - const char* p = name.string(); - const char* q = strchr(p, '.'); - if (p == q) { - rule += pkg; - rule += name; - } else if (q == NULL) { - rule += pkg; - rule += "."; - rule += name; - } else { - rule += name; - } - String8 location = tag; - location += " "; - location += assFile->getSourceFile(); - char lineno[20]; - sprintf(lineno, ":%d", tree.getLineNumber()); - location += lineno; + String8 location = tag; + location += " "; + location += assFile->getSourceFile(); + char lineno[20]; + sprintf(lineno, ":%d", tree.getLineNumber()); + location += lineno; - keep->add(rule, location); - } + keep->add(rule, location); } } }