zoukankan      html  css  js  c++  java
  • Android PackageManager基础知识

    一、PackageManagerService启动过程

        SystemServer首先启动,创建一个ServerThread线程来启动所有Android核心服务,其中PackageManagerService.main方法启动了PackageManagerService。

        main方法中就是实例化PackageManagerService对象,并注册到ServiceManager中。

        PackageManagerService的构造过程设计到几个重要的操作:
        1、创建Settings对象,向其中添加SharedUser,在android清单文件中定义的SharedUserId,例如android.uid.system就是在这里定义的。Settings的构造方法中还创建了一系列的目录和文件,例如/data/system目录。
            android中UID范围:
            SYSTEM_UID = 1000;
            非系统应用10000~19999;
            隔离沙箱进程99000~99999;
        2、创建应用安装器Installer。
        3、启动消息处理线程——一个名为PackageManager的HandlerThread。
        4、创建用户管理对象UserManager。
        5、通过readPermissions()方法读取并解析/etc/permissions下的xml文件,包括指定UID拥有的权限,feature标签下的硬件信息和系统库的配置信息。
        6、读取安装包信息,包括以下重要文件:
            /data/system/packages.xml 系统中安装的Package信息。
            /data/system/packages-stopped.xml 记录系统中强制停止的Package信息。
            /data/system/packages.list 保存系统中所有非系统自带的APK信息。
        7、监控和扫描系统包安装目录:
            /system/framework 系统库
            /system/app 默认的系统应用
            /vendor/app 厂商定制的应用
        8、扫描非系统apk信息:
            /data/app/
            /system/preloadapp/
            /data/app-private/


    二、PackageManager框架
        android的PackageManager框架是一个典型的AIDL框架。代码路径DIR=framework/base/core/java/android/。
        IPackageManager.aidl文件在DIR/content/pm/IPackageManager.aidl处,按照android标准的aidl处理模式,会生成一个存根IPackageManager.Stub和一个代理IPackageManager.Stub.Proxy.
        存根的具体实现就是PackageManagerService,而代理的具体实现其实是ApplicationPackageManager,PackageManager是它的父类。
        ApplicationPackageManager路径是DIR/app/ApplicationPackageManager.java。
        PackageManager路径是DIR/content/pm/PackageManager.java。
        在调用Context.getPackageManager()方法时,实际调用的是ContextImpl中的方法,该方法从ActivityThread中取出一个IPackageManager的代理对象,用这个代理实例化了ApplicationPackageManager。

  • 相关阅读:
    BZOJ-1034: [ZJOI2008]泡泡堂BNB (田忌赛马贪心)
    BZOJ-2190: [SDOI2008]仪仗队 (欧拉函数)
    BZOJ-1864: [Zjoi2006]三色二叉树 (julao都说简单的树形DP)
    BZOJ-2657: [Zjoi2012]旅游(journey) (树形DP求最长链)
    BZOJ-2241: [SDOI2011]打地鼠 (模拟+枚举)
    BZOJ-1207: [HNOI2004]打鼹鼠 (LIS类似DP)
    BZOJ-1821: [JSOI2010]Group 部落划分 Group (二分+并查集)
    BZOJ-1218: [HNOI2003]激光炸弹 (前缀和+模拟)
    [SinGuLaRiTy] ZKW线段树
    [SinGuLaRiTy] 字节大小
  • 原文地址:https://www.cnblogs.com/yuanchongjie/p/4550797.html
Copyright © 2011-2022 走看看