}
}
-class ResourceTypeSet : public RefBase,
- public KeyedVector<String8,sp<AaptGroup> >
-{
-public:
- ResourceTypeSet();
-};
-
ResourceTypeSet::ResourceTypeSet()
:RefBase(),
KeyedVector<String8,sp<AaptGroup> >()
static status_t parsePackage(const sp<AaptAssets>& assets, const sp<AaptGroup>& 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());
}
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());
}
}
}
}
-static void applyFileOverlay(const sp<AaptAssets>& assets,
+static bool applyFileOverlay(const sp<AaptAssets>& assets,
const sp<ResourceTypeSet>& baseSet,
const char *resType)
{
// Also add any found only in the overlay.
sp<AaptAssets> overlay = assets->getOverlay();
String8 resTypeString(resType);
-
+
// work through the linked list of overlays
while (overlay.get()) {
KeyedVector<String8, sp<ResourceTypeSet> >* overlayRes = overlay->getResources();
size_t overlayCount = overlaySet->size();
for (size_t overlayIndex=0; overlayIndex<overlayCount; overlayIndex++) {
size_t baseIndex = baseSet->indexOfKey(overlaySet->keyAt(overlayIndex));
- if (baseIndex != UNKNOWN_ERROR) {
+ if (baseIndex < UNKNOWN_ERROR) {
// look for same flavor. For a given file (strings.xml, for example)
// there may be a locale specific or other flavors - we want to match
// the same flavor.
}
} else {
// this group doesn't exist (a file that's only in the overlay)
- // add it
- baseSet->add(overlaySet->keyAt(overlayIndex),
- overlaySet->valueAt(overlayIndex));
+ fprintf(stderr, "aapt: error: "
+ "*** Resource file '%s' exists only in an overlay\n",
+ overlaySet->keyAt(overlayIndex).string());
+ return false;
}
}
// this overlay didn't have resources for this type
// try next overlay
overlay = overlay->getOverlay();
}
- return;
+ return true;
}
void addTagAttribute(const sp<XMLNode>& node, const char* ns8,
current = current->getOverlay();
}
// apply the overlay files to the base set
- applyFileOverlay(assets, drawables, "drawable");
- applyFileOverlay(assets, layouts, "layout");
- applyFileOverlay(assets, anims, "anim");
- applyFileOverlay(assets, xmls, "xml");
- applyFileOverlay(assets, raws, "raw");
- applyFileOverlay(assets, colors, "color");
- applyFileOverlay(assets, menus, "menu");
+ if (!applyFileOverlay(assets, drawables, "drawable") ||
+ !applyFileOverlay(assets, layouts, "layout") ||
+ !applyFileOverlay(assets, anims, "anim") ||
+ !applyFileOverlay(assets, xmls, "xml") ||
+ !applyFileOverlay(assets, raws, "raw") ||
+ !applyFileOverlay(assets, colors, "color") ||
+ !applyFileOverlay(assets, menus, "menu")) {
+ return UNKNOWN_ERROR;
+ }
bool hasErrors = false;
printf(" Writing public definitions to %s.\n", bundle->getPublicOutputFile());
}
table.writePublicDefinitions(String16(assets->getPackage()), fp);
+ fclose(fp);
}
NOISY(
return err;
}
}
-
return err;
}