packageinstaller.apk_secsettings.apk_packageinstaller 5.1(4)

电脑杂谈  发布时间:2017-04-01 22:08:18  来源:网络整理

(5)扫描APK文件并解析

	private void scanDirLI(File dir, int flags, int scanMode, long currentTime) {
		String[] files = dir.list();
		if (files == null) {
			Log.d(TAG, "No files in app dir " + dir);
			return;
		}

		if (DEBUG_PACKAGE_SCANNING) {
			Log.d(TAG, "Scanning app dir " + dir);
		}

		int i;
		for (i = 0; i < files.length; i++) {
			File file = new File(dir, files[i]);
			// 放过非apk文件
			if (!isPackageFilename(files[i])) {
				// Ignore entries which are not apks
				continue;
			}
			//此方解析出Package实例
			PackageParser.Package pkg = scanPackageLI(file, flags
					| PackageParser.PARSE_MUST_BE_APK, scanMode, currentTime,
					null);
			// Dont mess around with apps in system partition.
			if (pkg == null
					&& (flags & PackageParser.PARSE_IS_SYSTEM) == 0
					&& mLastScanError == PackageManager.INSTALL_FAILED_INVALID_APK) {
				// Delete the apk
				Slog.w(TAG, "Cleaning up failed install of " + file);
				file.delete();
			}
		}
	}
实际上,在解析APK的过程中涉及到多各层次的方法的调用,并最终生成了Package实例:

有一点需要注意,我省略了一个重载的方法parsePackage(),经过以上的流程,一个APK的AndroidManifest文件就被成功解析成PackageParser.Package实例了。

从以上源码分析可以看出来,当安装一个apk的时候首先要做的就是将其AndroidMainfest.xml文件进行解析。解析其中注册的所有权限和组件等。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-38912-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...