diff options
Diffstat (limited to 'tools/aapt/Command.cpp')
-rw-r--r-- | tools/aapt/Command.cpp | 196 |
1 files changed, 114 insertions, 82 deletions
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp index 42b752d98baa..d80aaba8f64b 100644 --- a/tools/aapt/Command.cpp +++ b/tools/aapt/Command.cpp @@ -494,7 +494,7 @@ struct ImpliedFeature { struct Feature { Feature() : required(false), version(-1) {} - Feature(bool required, int32_t version = -1) : required(required), version(version) {} + explicit Feature(bool required, int32_t version = -1) : required(required), version(version) {} /** * Whether the feature is required. @@ -767,7 +767,7 @@ int doDump(Bundle* bundle) } // Source for AndroidManifest.xml - const String8 manifestFile = String8::format("%s@AndroidManifest.xml", filename); + const String8 manifestFile("AndroidManifest.xml"); // The dynamicRefTable can be null if there are no resources for this asset cookie. // This fine. @@ -867,14 +867,16 @@ int doDump(Bundle* bundle) depth++; const char16_t* ctag16 = tree.getElementName(&len); if (ctag16 == NULL) { - fprintf(stderr, "ERROR: failed to get XML element name (bad string pool)\n"); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR: failed to get XML element name (bad string pool)"); goto bail; } String8 tag(ctag16); //printf("Depth %d tag %s\n", depth, tag.string()); if (depth == 1) { if (tag != "manifest") { - fprintf(stderr, "ERROR: manifest does not start with <manifest> tag\n"); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR: manifest does not start with <manifest> tag"); goto bail; } String8 pkg = AaptXml::getAttribute(tree, NULL, "package", NULL); @@ -884,12 +886,14 @@ int doDump(Bundle* bundle) String8 error; String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR: %s\n", error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name': %s", error.string()); goto bail; } if (name == "") { - fprintf(stderr, "ERROR: missing 'android:name' for permission\n"); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR: missing 'android:name' for permission"); goto bail; } printf("permission: %s\n", @@ -898,12 +902,14 @@ int doDump(Bundle* bundle) String8 error; String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR: %s\n", error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute: %s", error.string()); goto bail; } if (name == "") { - fprintf(stderr, "ERROR: missing 'android:name' for uses-permission\n"); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR: missing 'android:name' for uses-permission"); goto bail; } printUsesPermission(name, @@ -913,13 +919,14 @@ int doDump(Bundle* bundle) String8 error; String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR: %s\n", error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute: %s", error.string()); goto bail; } if (name == "") { - fprintf(stderr, "ERROR: missing 'android:name' for " - "uses-permission-sdk-23\n"); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR: missing 'android:name' for uses-permission-sdk-23"); goto bail; } printUsesPermissionSdk23( @@ -1180,14 +1187,16 @@ int doDump(Bundle* bundle) const char16_t* ctag16 = tree.getElementName(&len); if (ctag16 == NULL) { - fprintf(stderr, "ERROR: failed to get XML element name (bad string pool)\n"); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR: failed to get XML element name (bad string pool)"); goto bail; } String8 tag(ctag16); //printf("Depth %d, %s\n", depth, tag.string()); if (depth == 1) { if (tag != "manifest") { - fprintf(stderr, "ERROR: manifest does not start with <manifest> tag\n"); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR: manifest does not start with <manifest> tag"); goto bail; } pkg = AaptXml::getAttribute(tree, NULL, "package", NULL); @@ -1196,7 +1205,8 @@ int doDump(Bundle* bundle) int32_t versionCode = AaptXml::getIntegerAttribute(tree, VERSION_CODE_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:versionCode' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:versionCode' attribute: %s", error.string()); goto bail; } @@ -1208,7 +1218,8 @@ int doDump(Bundle* bundle) String8 versionName = AaptXml::getResolvedAttribute(res, tree, VERSION_NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:versionName' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:versionName' attribute: %s", error.string()); goto bail; } @@ -1229,7 +1240,8 @@ int doDump(Bundle* bundle) int32_t installLocation = AaptXml::getResolvedIntegerAttribute(res, tree, INSTALL_LOCATION_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:installLocation' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:installLocation' attribute: %s", error.string()); goto bail; } @@ -1295,14 +1307,15 @@ int doDump(Bundle* bundle) String8 icon = AaptXml::getResolvedAttribute(res, tree, ICON_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:icon' attribute: %s\n", - error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:icon' attribute: %s", error.string()); goto bail; } int32_t testOnly = AaptXml::getIntegerAttribute(tree, TEST_ONLY_ATTR, 0, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:testOnly' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:testOnly' attribute: %s", error.string()); goto bail; } @@ -1310,8 +1323,8 @@ int doDump(Bundle* bundle) String8 banner = AaptXml::getResolvedAttribute(res, tree, BANNER_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:banner' attribute: %s\n", - error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:banner' attribute: %s", error.string()); goto bail; } printf("application: label='%s' ", @@ -1329,8 +1342,8 @@ int doDump(Bundle* bundle) int32_t isGame = AaptXml::getResolvedIntegerAttribute(res, tree, ISGAME_ATTR, 0, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:isGame' attribute: %s\n", - error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:isGame' attribute: %s", error.string()); goto bail; } if (isGame != 0) { @@ -1340,7 +1353,8 @@ int doDump(Bundle* bundle) int32_t debuggable = AaptXml::getResolvedIntegerAttribute(res, tree, DEBUGGABLE_ATTR, 0, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:debuggable' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:debuggable' attribute: %s", error.string()); goto bail; } @@ -1369,8 +1383,8 @@ int doDump(Bundle* bundle) String8 name = AaptXml::getResolvedAttribute(res, tree, MIN_SDK_VERSION_ATTR, &error); if (error != "") { - fprintf(stderr, - "ERROR getting 'android:minSdkVersion' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:minSdkVersion' attribute: %s", error.string()); goto bail; } @@ -1391,8 +1405,8 @@ int doDump(Bundle* bundle) String8 name = AaptXml::getResolvedAttribute(res, tree, TARGET_SDK_VERSION_ATTR, &error); if (error != "") { - fprintf(stderr, - "ERROR getting 'android:targetSdkVersion' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:targetSdkVersion' attribute: %s", error.string()); goto bail; } @@ -1457,8 +1471,8 @@ int doDump(Bundle* bundle) FeatureGroup group; group.label = AaptXml::getResolvedAttribute(res, tree, LABEL_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:label' attribute:" - " %s\n", error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:label' attribute: %s", error.string()); goto bail; } featureGroups.add(group); @@ -1503,13 +1517,14 @@ int doDump(Bundle* bundle) } else if (tag == "uses-permission") { String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", - error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute: %s", error.string()); goto bail; } if (name == "") { - fprintf(stderr, "ERROR: missing 'android:name' for uses-permission\n"); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR: missing 'android:name' for uses-permission"); goto bail; } @@ -1538,14 +1553,14 @@ int doDump(Bundle* bundle) } else if (tag == "uses-permission-sdk-23" || tag == "uses-permission-sdk-m") { String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", - error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute: %s", error.string()); goto bail; } if (name == "") { - fprintf(stderr, "ERROR: missing 'android:name' for " - "uses-permission-sdk-23\n"); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR: missing 'android:name' for uses-permission-sdk-23"); goto bail; } @@ -1560,9 +1575,9 @@ int doDump(Bundle* bundle) printf("uses-package:'%s'\n", ResTable::normalizeForOutput(name.string()).string()); } else { - fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", - error.string()); - goto bail; + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute: %s", error.string()); + goto bail; } } else if (tag == "original-package") { String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error); @@ -1570,9 +1585,9 @@ int doDump(Bundle* bundle) printf("original-package:'%s'\n", ResTable::normalizeForOutput(name.string()).string()); } else { - fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", - error.string()); - goto bail; + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute: %s", error.string()); + goto bail; } } else if (tag == "supports-gl-texture") { String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error); @@ -1580,15 +1595,15 @@ int doDump(Bundle* bundle) printf("supports-gl-texture:'%s'\n", ResTable::normalizeForOutput(name.string()).string()); } else { - fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", - error.string()); - goto bail; + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute: %s", error.string()); + goto bail; } } else if (tag == "compatible-screens") { printCompatibleScreens(tree, &error); if (error != "") { - fprintf(stderr, "ERROR getting compatible screens: %s\n", - error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting compatible screens: %s", error.string()); goto bail; } depth--; @@ -1625,7 +1640,8 @@ int doDump(Bundle* bundle) withinActivity = true; activityName = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute: %s", error.string()); goto bail; } @@ -1633,7 +1649,8 @@ int doDump(Bundle* bundle) activityLabel = AaptXml::getResolvedAttribute(res, tree, LABEL_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:label' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:label' attribute: %s", error.string()); goto bail; } @@ -1641,7 +1658,8 @@ int doDump(Bundle* bundle) activityIcon = AaptXml::getResolvedAttribute(res, tree, ICON_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:icon' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:icon' attribute: %s", error.string()); goto bail; } @@ -1649,7 +1667,8 @@ int doDump(Bundle* bundle) activityBanner = AaptXml::getResolvedAttribute(res, tree, BANNER_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:banner' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:banner' attribute: %s", error.string()); goto bail; } @@ -1676,9 +1695,9 @@ int doDump(Bundle* bundle) } else if (tag == "uses-library") { String8 libraryName = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, + SourcePos(manifestFile, tree.getLineNumber()).error( "ERROR getting 'android:name' attribute for uses-library" - " %s\n", error.string()); + " %s", error.string()); goto bail; } int req = AaptXml::getIntegerAttribute(tree, @@ -1691,9 +1710,9 @@ int doDump(Bundle* bundle) receiverName = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, + SourcePos(manifestFile, tree.getLineNumber()).error( "ERROR getting 'android:name' attribute for receiver:" - " %s\n", error.string()); + " %s", error.string()); goto bail; } @@ -1704,9 +1723,9 @@ int doDump(Bundle* bundle) hasBindDeviceAdminPermission = true; } } else { - fprintf(stderr, + SourcePos(manifestFile, tree.getLineNumber()).error( "ERROR getting 'android:permission' attribute for" - " receiver '%s': %s\n", + " receiver '%s': %s", receiverName.string(), error.string()); } } else if (tag == "service") { @@ -1714,8 +1733,9 @@ int doDump(Bundle* bundle) serviceName = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:name' attribute for " - "service:%s\n", error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute for " + "service:%s", error.string()); goto bail; } @@ -1740,8 +1760,9 @@ int doDump(Bundle* bundle) hasBindDreamServicePermission = true; } } else { - fprintf(stderr, "ERROR getting 'android:permission' attribute for " - "service '%s': %s\n", serviceName.string(), error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:permission' attribute for " + "service '%s': %s", serviceName.string(), error.string()); } } else if (tag == "provider") { withinProvider = true; @@ -1749,26 +1770,27 @@ int doDump(Bundle* bundle) bool exported = AaptXml::getResolvedIntegerAttribute(res, tree, EXPORTED_ATTR, &error); if (error != "") { - fprintf(stderr, + SourcePos(manifestFile, tree.getLineNumber()).error( "ERROR getting 'android:exported' attribute for provider:" - " %s\n", error.string()); + " %s", error.string()); goto bail; } bool grantUriPermissions = AaptXml::getResolvedIntegerAttribute( res, tree, GRANT_URI_PERMISSIONS_ATTR, &error); if (error != "") { - fprintf(stderr, + SourcePos(manifestFile, tree.getLineNumber()).error( "ERROR getting 'android:grantUriPermissions' attribute for " - "provider: %s\n", error.string()); + "provider: %s", error.string()); goto bail; } String8 permission = AaptXml::getResolvedAttribute(res, tree, PERMISSION_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:permission' attribute for " - "provider: %s\n", error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:permission' attribute for " + "provider: %s", error.string()); goto bail; } @@ -1779,8 +1801,9 @@ int doDump(Bundle* bundle) String8 metaDataName = AaptXml::getResolvedAttribute(res, tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:name' attribute for " - "meta-data:%s\n", error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute for " + "meta-data: %s", error.string()); goto bail; } printf("meta-data: name='%s' ", @@ -1793,9 +1816,10 @@ int doDump(Bundle* bundle) printResolvedResourceAttribute(res, tree, RESOURCE_ATTR, String8("resource"), &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:value' or " + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:value' or " "'android:resource' attribute for " - "meta-data:%s\n", error.string()); + "meta-data: %s", error.string()); goto bail; } } @@ -1805,7 +1829,8 @@ int doDump(Bundle* bundle) if (name != "" && error == "") { supportedInput.add(name); } else { - fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute: %s", error.string()); goto bail; } @@ -1864,8 +1889,9 @@ int doDump(Bundle* bundle) } else if (withinService && tag == "meta-data") { String8 name = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:name' attribute for " - "meta-data tag in service '%s': %s\n", serviceName.string(), + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute for " + "meta-data tag in service '%s': %s", serviceName.string(), error.string()); goto bail; } @@ -1880,8 +1906,9 @@ int doDump(Bundle* bundle) String8 xmlPath = AaptXml::getResolvedAttribute(res, tree, RESOURCE_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:resource' attribute for " - "meta-data tag in service '%s': %s\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:resource' attribute for " + "meta-data tag in service '%s': %s", serviceName.string(), error.string()); goto bail; } @@ -1889,7 +1916,8 @@ int doDump(Bundle* bundle) Vector<String8> categories = getNfcAidCategories(assets, xmlPath, offHost, &error); if (error != "") { - fprintf(stderr, "ERROR getting AID category for service '%s'\n", + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting AID category for service '%s'", serviceName.string()); goto bail; } @@ -1910,8 +1938,8 @@ int doDump(Bundle* bundle) if (tag == "action") { action = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", - error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'android:name' attribute: %s", error.string()); goto bail; } @@ -1966,8 +1994,8 @@ int doDump(Bundle* bundle) if (tag == "category") { String8 category = AaptXml::getAttribute(tree, NAME_ATTR, &error); if (error != "") { - fprintf(stderr, "ERROR getting 'name' attribute: %s\n", - error.string()); + SourcePos(manifestFile, tree.getLineNumber()).error( + "ERROR getting 'name' attribute: %s", error.string()); goto bail; } if (withinActivity) { @@ -2282,6 +2310,10 @@ int doDump(Bundle* bundle) result = NO_ERROR; bail: + if (SourcePos::hasErrors()) { + SourcePos::printErrors(stderr); + } + if (asset) { delete asset; } |