Android PackageManagerService流程详细分析(七)之监控扫描指定APP目录
来源:互联网 发布:linux oracle tns配置 编辑:程序博客网 时间:2024/06/13 23:21
继续看构造函数:
public PackageManagerService(Context context, Installer installer, boolean factoryTest, boolean onlyCore) { ...... // 1 // Find base frameworks (resource packages without code). mFrameworkInstallObserver = new AppDirObserver( mFrameworkDir.getPath(), OBSERVER_EVENTS, true); mFrameworkInstallObserver.startWatching(); scanDirLI(mFrameworkDir, PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR, scanMode | SCAN_NO_DEX, 0); // 2 // Collect all system packages. mSystemAppDir = new File(Environment.getRootDirectory(), "app"); mSystemInstallObserver = new AppDirObserver( mSystemAppDir.getPath(), OBSERVER_EVENTS, true); mSystemInstallObserver.startWatching(); scanDirLI(mSystemAppDir, PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR, scanMode, 0); // 3 // Collect all vendor packages. mVendorAppDir = new File("/vendor/app"); mVendorInstallObserver = new AppDirObserver( mVendorAppDir.getPath(), OBSERVER_EVENTS, true); mVendorInstallObserver.startWatching(); scanDirLI(mVendorAppDir, PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR, scanMode, 0); ...... if (!mOnlyCore) { EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_DATA_SCAN_START, SystemClock.uptimeMillis()); // 4 mAppInstallObserver = new AppDirObserver( mAppInstallDir.getPath(), OBSERVER_EVENTS, false); mAppInstallObserver.startWatching(); scanDirLI(mAppInstallDir, 0, scanMode, 0); // 5 mDrmAppInstallObserver = new AppDirObserver( mDrmAppPrivateInstallDir.getPath(), OBSERVER_EVENTS, false); mDrmAppInstallObserver.startWatching(); scanDirLI(mDrmAppPrivateInstallDir, PackageParser.PARSE_FORWARD_LOCK, scanMode, 0); } ......}
说明:
系统目录:
1、/system/framework/ 该目录中的文件都是系统库,例如 framework.jar、servers.jar、framework-res.apk等等。不过scanDirLI只扫描APK文件,所以这里的目标只有framework-res.apk。
2、/system/app/ 该目录下全是默认的系统APP,例如浏览器、桌面、系统设置等等。
3、/vendor/app/ 该目录文件由厂商提供,目前市面的机器基本都是把自己的系统应用放在/system/app/ 目录下面,我们的产品也是这样的。
非系统目录:
4、/data/app
5、/data/app-private
启动 AppDirObserver 线程监测1、2、3、4、5目录的事件,主要监听 add 和 remove 事件。对于目录监听底层通过inotify机制实现,inotify 是一种文件系统的变化通知机制,如文件增加、删除等事件可以立刻让用户态得知,它为用户态监视文件系统的变化提供了强大的支持。当有 add event 时调用 scanPackageLI(File , int , int)处理;当有 remove event 时调用 removePackageLI()处理。
下一节重点介绍下scanPackageLI()函数,里面做了一大堆事情,设计的东西很多,比较复杂。
1 0
- Android PackageManagerService流程详细分析(七)之监控扫描指定APP目录
- Android PackageManagerService流程详细分析(一)之启动
- Android PackageManagerService流程详细分析(二)之installer
- Android PackageManagerService流程详细分析(三)之PackageHandler
- Android PackageManagerService流程详细分析(四)之权限
- Android PackageManagerService流程详细分析(五)之packages
- Android PackageManagerService流程详细分析(六)之优化系统库
- Android system server之PackageManagerService详细分析
- Android Framework 之PackageManagerService详细分析
- Android PackageManagerService详细分析
- Android PackageManagerService详细分析
- Android PackageManagerService详细分析
- Android PackageManagerService详细分析
- Android PackageManagerService详细分析 .
- Android PackageManagerService详细分析
- Android PackageManagerService详细分析
- Android PackageManagerService详细分析
- Android PackageManagerService详细分析
- android开源组件官方地址
- 豆浆机改装记(8): Fragment测试
- Opencv实现傅里叶变换
- 项目架构
- 用ffmpeg命令叠加图片水印
- Android PackageManagerService流程详细分析(七)之监控扫描指定APP目录
- CC254X IBEACON开发
- 图像处理中的数学原理详解13——内积空间
- CheckedTextView,CheckBox和Button样式定义
- 第一部分 准备工作 OllyDBG
- 逻辑回归
- SQL语言
- 正则化
- 项目架构管理