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。
Android PackageManager基础知识的更多相关文章
- android图形基础知识
Android核心分析(23)-----Andoird GDI之基本原理及其总体框架 2010-06-13 22:49 18223人阅读 评论(18) 收藏 举报 AndroidGDI基本框架 在An ...
- Android 应用基础知识和应用组件
应用基础知识 安装到设备后,每个 Android 应用都运行在自己的安全沙箱内: Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户: 默认情况下,系统会为每个应 ...
- Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)
简介 前边具体操作和实战已经讲解和分享了很多了,但是一些android的一些基础知识,你又知道多少了,你都掌握了吗?这篇就由宏哥给小伙伴们既是一个分享,又是对前边的一次总结.为什么要对这些做一个简单的 ...
- android屏幕基础知识
首先,先来上一张图,看看android屏幕分辨率的占比情况 什么是dp,dip,dpi,sp.px ?之间的关系是什么? px:构成图像的最小单位 dp/dip:密度无关像素 以160dpi为基准 1 ...
- android一些基础知识
android应用基于JAVA, 支持SQL,由于底层是LINUX,所以支持C/C++ 目前有两种编程:基于ADT的JAVA编程,基于NDK的C编程 Android编程环境需要哪些:官方推荐用JDK+ ...
- Android自动化测试基础知识——MONKEY测试工具(转的)
本周开始启动手机输入法simeiji的自动化测试,同时开始接触手机浏览器自动化测试.接下来会对android自动化测试工具和方法做一个专题研究. 第一篇介绍monkey测试工具. 1 自动化测试背景 ...
- 安卓(Android)开发基础知识
.aar文件 .aar是一种压缩文件,和.jar类似,不过它可以包含资源文件,例如图片.drawable.xml资源 .jar文件 在软件领域,JAR文件(Java归档,英语:Java ARchive ...
- Android Service基础知识你知道多少?
Android四大组件-Service 多次调用startService会怎样?会执行多次onCreate吗? StopService在哪里调用?stopSelf在哪调用? 怎样使Service被ki ...
- Android的基础知识
一.adb 的简单命令 1. adb devices : 连接当前手机的设备 2.adb kill-server : 杀死当前的adbmingling 3.adb start-server : ...
随机推荐
- WCF入门教程系列五
一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...
- AfxOleInit()和::CoInitialize(NULL)区别
From: http://blog.csdn.net/zhoubl668/archive/2009/04/30/4139933.aspx OLE是建立在COM之上的技术,层次比COM要高.AfxOle ...
- 什么是JSONP以及它是怎么产生的
什么是JSONP以及它是怎么产生的 1.什么是jsonp JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Scr ...
- Server2008R2:由于没有远程桌面授权服务器可以提供许可证,.....错误的解决 ---设计师零张
一直使用远程桌面连接一台windows2008server服务器,今天突然报错,连不上了: “由于没有远程桌面授权服务器可以提供许可证,远程会话被中断.请跟服务器管理员联系.” 由于是 ...
- 痛并快乐的造轮子之旅:awk访问数据库之旅
俺是一枚悲催的数据统计程序员,从先辈的手里接收了这样的代码: #! /bin/sh alias statdb="mysql -h 192.168.1.1 -u stat -paaa stat ...
- stm32通用定时器中断问题
在使用stm32的通用定时器定时中断的时候,发现定时器在完成初始化配置后,定时器UIF位会立刻置位,导致在使能中断后,程序会立刻进入定时器中断. 如果设计代码时不希望定时器配置完成后,立刻进入中断,可 ...
- hdu 1317 XYZZY
http://acm.hdu.edu.cn/showproblem.php?pid=1317 #include <cstdio> #include <queue> #inclu ...
- 使用Discuz!自带参数防御CC攻击以及原理,修改Discuz X 开启防CC攻击后,不影响搜索引擎收录的方法
这部份的工作,以前花的时间太少. 希望能产生一定的作用. http://www.nigesb.com/discuz-cc-attacker-defence.html http://bbs.zb7.co ...
- bzoj1751 [Usaco2005 qua]Lake Counting
1751: [Usaco2005 qua]Lake Counting Time Limit: 5 Sec Memory Limit: 64 MB Submit: 168 Solved: 130 [ ...
- UVa 1449 - Dominating Patterns (AC自动机)
题目大意:给出多个字符串模板,并给出一个文本串,求在文本串中出现最多的模板,输出最多的次数并输出该模板(若有多个满足,则按输入顺序输出). 思路:赤裸裸的 AC自动机,上模板. 代码: #includ ...