X-Git-Url: https://git.saurik.com/android/aapt.git/blobdiff_plain/dd854d4c9322204ea873c2de498d6693b271952a..8f940cc47d01a1616bc2d43b471ef07ef2beda51:/Resource.cpp?ds=sidebyside diff --git a/Resource.cpp b/Resource.cpp index 027e3ab..9a5127d 100644 --- a/Resource.cpp +++ b/Resource.cpp @@ -45,13 +45,6 @@ static String8 parseResourceName(const String8& leaf) } } -class ResourceTypeSet : public RefBase, - public KeyedVector > -{ -public: - ResourceTypeSet(); -}; - ResourceTypeSet::ResourceTypeSet() :RefBase(), KeyedVector >() @@ -181,7 +174,7 @@ static sp getResourceFile(const sp& assets, bool makeIfNec static status_t parsePackage(const sp& assets, const sp& grp) { if (grp->getFiles().size() != 1) { - fprintf(stderr, "WARNING: Multiple AndroidManifest.xml files found, using %s\n", + fprintf(stderr, "warning: Multiple AndroidManifest.xml files found, using %s\n", grp->getFiles().valueAt(0)->getPrintableSource().string()); } @@ -279,15 +272,16 @@ static status_t preProcessImages(Bundle* bundle, const sp& assets, ResourceDirIterator it(set, String8("drawable")); Vector > newNameFiles; Vector newNamePaths; + bool hasErrors = false; ssize_t res; while ((res=it.next()) == NO_ERROR) { res = preProcessImage(bundle, assets, it.getFile(), NULL); - if (res != NO_ERROR) { - return res; + if (res < NO_ERROR) { + hasErrors = true; } } - return NO_ERROR; + return (hasErrors || (res < NO_ERROR)) ? UNKNOWN_ERROR : NO_ERROR; } status_t postProcessImages(const sp& assets, @@ -295,15 +289,16 @@ status_t postProcessImages(const sp& assets, const sp& set) { ResourceDirIterator it(set, String8("drawable")); + bool hasErrors = false; ssize_t res; while ((res=it.next()) == NO_ERROR) { res = postProcessImage(assets, table, it.getFile()); - if (res != NO_ERROR) { - return res; + if (res < NO_ERROR) { + hasErrors = true; } } - return res < NO_ERROR ? res : (status_t)NO_ERROR; + return (hasErrors || (res < NO_ERROR)) ? UNKNOWN_ERROR : NO_ERROR; } static void collect_files(const sp& dir, @@ -426,7 +421,7 @@ static void checkForIds(const String8& path, ResXMLParser& parser) if (code == ResXMLTree::START_TAG) { ssize_t index = parser.indexOfAttribute(NULL, "id"); if (index >= 0) { - fprintf(stderr, "%s:%d: WARNING: found plain 'id' attribute; did you mean the new 'android:id' name?\n", + fprintf(stderr, "%s:%d: warning: found plain 'id' attribute; did you mean the new 'android:id' name?\n", path.string(), parser.getLineNumber()); } } @@ -479,13 +474,22 @@ static bool applyFileOverlay(const sp& assets, // didn't find a match fall through and add it.. } baseGroup->addFile(overlayFiles.valueAt(overlayGroupIndex)); + assets->addGroupEntry(overlayFiles.keyAt(overlayGroupIndex)); } } else { // this group doesn't exist (a file that's only in the overlay) - fprintf(stderr, "aapt: error: " - "*** Resource file '%s' exists only in an overlay\n", - overlaySet->keyAt(overlayIndex).string()); - return false; + baseSet->add(overlaySet->keyAt(overlayIndex), + overlaySet->valueAt(overlayIndex)); + // make sure all flavors are defined in the resources. + sp overlayGroup = overlaySet->valueAt(overlayIndex); + DefaultKeyedVector > overlayFiles = + overlayGroup->getFiles(); + size_t overlayGroupSize = overlayFiles.size(); + for (size_t overlayGroupIndex = 0; + overlayGroupIndexaddGroupEntry(overlayFiles.keyAt(overlayGroupIndex)); + } } } // this overlay didn't have resources for this type @@ -1118,6 +1122,7 @@ status_t buildResources(Bundle* bundle, const sp& assets) printf(" Writing public definitions to %s.\n", bundle->getPublicOutputFile()); } table.writePublicDefinitions(String16(assets->getPackage()), fp); + fclose(fp); } NOISY( @@ -1135,7 +1140,6 @@ status_t buildResources(Bundle* bundle, const sp& assets) return err; } } - return err; }