1. PackageParser.parseBaseApk中,定义变量Resources res, XmlResourceParser parser
private Package parseBaseApk(File apkFile, AssetManager assets, int flags)
throws PackageParserException {
final String apkPath = apkFile.getAbsolutePath();
String volumeUuid = null;
if (apkPath.startsWith(MNT_EXPAND)) {
final int end = apkPath.indexOf('/', MNT_EXPAND.length());
volumeUuid = apkPath.substring(MNT_EXPAND.length(), end);
}
mParseError = PackageManager.INSTALL_SUCCEEDED;
mArchiveSourcePath = apkFile.getAbsolutePath();
if (DEBUG_JAR) Slog.d(TAG, "Scanning base APK: " + apkPath);
final int cookie = loadApkIntoAssetManager(assets, apkPath, flags); //将apkPath如/system/priv-app/Dialer/Dialer.apk加载进assets资源管理器
Resources res = null;
XmlResourceParser parser = null; //变量申名
2. 变量附值, 1中loadApkIntoAssetManager己将数据加载进AssetManager assets
try {
res = new Resources(assets, mMetrics, null); //创建Resources类
parser = assets.openXmlResourceParser(cookie, ANDROID_MANIFEST_FILENAME); //资源管理器打开资料中的AndroidManifest.xml数据给解析器parser
final String[] outError = new String[1];
final Package pkg = parseBaseApk(apkPath, res, parser, flags, outError);
if (pkg == null) {
throw new PackageParserException(mParseError,
apkPath + " (at " + parser.getPositionDescription() + "): " + outError[0]);
}
pkg.setVolumeUuid(volumeUuid);
pkg.setApplicationVolumeUuid