X-Git-Url: https://git.saurik.com/android/aapt.git/blobdiff_plain/af85d202b8bdf203aa7c6c581f59ff3934b2756f..af945cf38e6121bb5066e4591493f78d09cba4e3:/Resource.cpp diff --git a/Resource.cpp b/Resource.cpp index f8c5c38..7142b1c 100644 --- a/Resource.cpp +++ b/Resource.cpp @@ -224,9 +224,9 @@ static status_t parsePackage(Bundle* bundle, const sp& assets, ssize_t minSdkIndex = block.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, "minSdkVersion"); if (minSdkIndex >= 0) { - String8 minSdkString = String8( - block.getAttributeStringValue(minSdkIndex, &len)); - bundle->setMinSdkVersion(minSdkString.string()); + const uint16_t* minSdk16 = block.getAttributeStringValue(minSdkIndex, &len); + const char* minSdk8 = strdup(String8(minSdk16).string()); + bundle->setMinSdkVersion(minSdk8); } } } @@ -562,9 +562,10 @@ void addTagAttribute(const sp& node, const char* ns8, node->addAttribute(ns, attr, String16(value)); } -static void fullyQualifyClassName(String8& package, sp node) { +static void fullyQualifyClassName(const String8& package, sp node, + const String16& attrName) { XMLNode::attribute_entry* attr = node->editAttribute( - String16("http://schemas.android.com/apk/res/android"), String16("name")); + String16("http://schemas.android.com/apk/res/android"), attrName); if (attr != NULL) { String8 name(attr->string); @@ -635,19 +636,40 @@ status_t massageManifest(Bundle* bundle, sp root) // Make class names fully qualified sp application = root->getChildElement(String16(), String16("application")); if (application != NULL) { - fullyQualifyClassName(origPackage, application); + fullyQualifyClassName(origPackage, application, String16("name")); Vector >& children = const_cast >&>(application->getChildren()); for (size_t i = 0; i < children.size(); i++) { sp child = children.editItemAt(i); String8 tag(child->getElementName()); if (tag == "activity" || tag == "service" || tag == "receiver" || tag == "provider") { - fullyQualifyClassName(origPackage, child); + fullyQualifyClassName(origPackage, child, String16("name")); + } else if (tag == "activity-alias") { + fullyQualifyClassName(origPackage, child, String16("name")); + fullyQualifyClassName(origPackage, child, String16("targetActivity")); } } } } + // Deal with manifest package name overrides + const char* instrumentationPackageNameOverride = bundle->getInstrumentationPackageNameOverride(); + if (instrumentationPackageNameOverride != NULL) { + // Fix up instrumentation targets. + Vector >& children = const_cast >&>(root->getChildren()); + for (size_t i = 0; i < children.size(); i++) { + sp child = children.editItemAt(i); + String8 tag(child->getElementName()); + if (tag == "instrumentation") { + XMLNode::attribute_entry* attr = child->editAttribute( + String16("http://schemas.android.com/apk/res/android"), String16("targetPackage")); + if (attr != NULL) { + attr->string.setTo(String16(instrumentationPackageNameOverride)); + } + } + } + } + return NO_ERROR; }