private Package parseBaseApkCommon(Package pkg, Set<String> acceptedTags, Resources res,
XmlResourceParser parser, int flags, String[] outError)
throws XmlPullParserException, IOException {
//其他代码略
if (tagName.equals(TAG_APPLICATION)) {
//其他代码略
if (!parseBaseApplication(pkg, res, parser, flags, outError)) {//解释application标签
return null;
}
} else if (tagName.equals(TAG_OVERLAY)) {
//其他代码略
} else if (tagName.equals(TAG_KEY_SETS)) {
if (!parseKeySets(pkg, res, parser, outError)) {
return null;
}
} else if (tagName.equals(TAG_PERMISSION_GROUP)) {
if (!parsePermissionGroup(pkg, flags, res, parser, outError)) {
return null;
}
} else if (tagName.equals(TAG_PERMISSION)) {
if (!parsePermission(pkg, res, parser, outError)) {
return null;
}
} else if (tagName.equals(TAG_PERMISSION_TREE)) {
if (!parsePermissionTree(pkg, res, parser, outError)) {
return null;
}
} else if (tagName.equals(TAG_USES_PERMISSION)) {
if (!parseUsesPermission(pkg, res, parser)) {
return null;
}
} else if (tagName.equals(TAG_USES_PERMISSION_SDK_M)
|| tagName.equals(TAG_USES_PERMISSION_SDK_23)) {
if (!parseUsesPermission(pkg, res, parser)) {
return null;
}
} else if (tagName.equals(TAG_USES_CONFIGURATION)) {
//其他代码略
} else if (tagName.equals(TAG_USES_FEATURE)) {
//其他代码略
} else if (tagName.equals(TAG_FEATURE_GROUP)) {
//其他代码略
} else if (tagName.equals(TAG_USES_SDK)) {
//其他代码略
} else if (tagName.equals(TAG_SUPPORT_SCREENS)) {
//其他代码略
} else if (tagName.equals(TAG_PROTECTED_BROADCAST)) {
//其他代码略
} else if (tagName.equals(TAG_INSTRUMENTATION)) {
//其他代码略
} else if (tagName.equals(TAG_ORIGINAL_PACKAGE)) {
//其他代码略
} else if (tagName.equals(TAG_ADOPT_PERMISSIONS)) {
//其他代码略
} else if (tagName.equals(TAG_USES_GL_TEXTURE)) {
//其他代码略
} else if (tagName.equals(TAG_COMPATIBLE_SCREENS)) {
//其他代码略
} else if (tagName.equals(TAG_SUPPORTS_INPUT)) {//
//其他代码略
} else if (tagName.equals(TAG_EAT_COMMENT)) {
//其他代码略
} else if (tagName.equals(TAG_PACKAGE)) {
//其他代码略
} else if (tagName.equals(TAG_RESTRICT_UPDATE)) {
//其他代码略
} else if (RIGID_PARSER) {
//其他代码略
} else {
//其他代码略
}
}
=======================================================================
从上面代码可以看到,就是对各个标签的内容进行解释。我们再来看看parseBaseApplication这个方法,这个是对Application进行解释。
8.2 parseBaseApplication方法
=======================================================================
private boolean parseBaseApplication(Package owner, Resources res,
XmlResourceParser parser, int flags, String[] outError)
throws XmlPullParserException, IOException {
//其他代码略
String tagName = parser.getName();
if (tagName.equals("activity")) {//解释activity
Activity a = parseActivity(owner, res, parser, flags, outError, cachedArgs, false,
owner.baseHardwareAccelerated);
//其他代码略
} else if (tagName.equals("receiver")) {//解释receiver
Activity a = parseActivity(owner, res, parser, flags, outError, cachedArgs,
true, false);
//其他代码略
} else if (tagName.equals("service")) {//解释service
Service s = parseService(owner, res, parser, flags, outError, cachedArgs);
//其他代码略
} else if (tagName.equals("provider")) {//解释provider
Provider p = parseProvider(owner, res, parser, flags, outError, cachedArgs);
//其他代码略
} else if (tagName.equals("activity-alias")) {
Activity a = parseActivityAlias(owner, res, parser, flags, outError, cachedArgs);
//其他代码略
} else if (parser.getName().equals("meta-data")) {
//其他代码略
} else if (tagName.equals("static-library")) {
//其他代码略
} else if (tagName.equals("library")) {
//其他代码略
} else if (tagName.equals("uses-static-library")) {
if (!parseUsesStaticLibrary(owner, res, parser, outError)) {
return false;
}
} else if (tagName.equals("uses-library")) {
//其他代码略
} else if (tagName.equals("uses-package")) {
//其他代码略
} else {
//其他代码略
}
//其他代码略
return true;
}
=======================================================================
可以看到,上面有对activity、receiver、service等标签的解释,activity的具体解释在parseActivity这个方法里面,有兴趣的可以自行去看下,这里就不细说了,同时可以看到receiver也是在parseActivity这个方法中解释。
Reference: