MCPcopy Create free account
hub / github.com/CyanogenMod/android_frameworks_base / parsePackage

Function parsePackage

tools/aapt/Resource.cpp:199–261  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

197}
198
199static status_t parsePackage(Bundle* bundle, const sp<AaptAssets>& assets,
200 const sp<AaptGroup>& grp)
201{
202 if (grp->getFiles().size() != 1) {
203 fprintf(stderr, "warning: Multiple AndroidManifest.xml files found, using %s\n",
204 grp->getFiles().valueAt(0)->getPrintableSource().string());
205 }
206
207 sp<AaptFile> file = grp->getFiles().valueAt(0);
208
209 ResXMLTree block;
210 status_t err = parseXMLResource(file, &block);
211 if (err != NO_ERROR) {
212 return err;
213 }
214 //printXMLBlock(&block);
215
216 ResXMLTree::event_code_t code;
217 while ((code=block.next()) != ResXMLTree::START_TAG
218 && code != ResXMLTree::END_DOCUMENT
219 && code != ResXMLTree::BAD_DOCUMENT) {
220 }
221
222 size_t len;
223 if (code != ResXMLTree::START_TAG) {
224 fprintf(stderr, "%s:%d: No start tag found\n",
225 file->getPrintableSource().string(), block.getLineNumber());
226 return UNKNOWN_ERROR;
227 }
228 if (strcmp16(block.getElementName(&len), String16("manifest").string()) != 0) {
229 fprintf(stderr, "%s:%d: Invalid start tag %s, expected <manifest>\n",
230 file->getPrintableSource().string(), block.getLineNumber(),
231 String8(block.getElementName(&len)).string());
232 return UNKNOWN_ERROR;
233 }
234
235 ssize_t nameIndex = block.indexOfAttribute(NULL, "package");
236 if (nameIndex < 0) {
237 fprintf(stderr, "%s:%d: <manifest> does not have package attribute.\n",
238 file->getPrintableSource().string(), block.getLineNumber());
239 return UNKNOWN_ERROR;
240 }
241
242 assets->setPackage(String8(block.getAttributeStringValue(nameIndex, &len)));
243
244 String16 uses_sdk16("uses-sdk");
245 while ((code=block.next()) != ResXMLTree::END_DOCUMENT
246 && code != ResXMLTree::BAD_DOCUMENT) {
247 if (code == ResXMLTree::START_TAG) {
248 if (strcmp16(block.getElementName(&len), uses_sdk16.string()) == 0) {
249 ssize_t minSdkIndex = block.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE,
250 "minSdkVersion");
251 if (minSdkIndex >= 0) {
252 const uint16_t* minSdk16 = block.getAttributeStringValue(minSdkIndex, &len);
253 const char* minSdk8 = strdup(String8(minSdk16).string());
254 bundle->setManifestMinSdkVersion(minSdk8);
255 }
256 }

Callers 2

buildResourcesFunction · 0.85
addMethod · 0.85

Calls 13

parseXMLResourceFunction · 0.85
stringMethod · 0.80
getPrintableSourceMethod · 0.80
getElementNameMethod · 0.80
indexOfAttributeMethod · 0.80
String16Class · 0.70
sizeMethod · 0.65
valueAtMethod · 0.45
nextMethod · 0.45
getLineNumberMethod · 0.45

Tested by

no test coverage detected