PackageManagerService(PMS)由SystemServer创建,用以管理所有jar和app的安装、卸载。
SystemServer:startBootstrapServices() -> PackageManagerService:main() -> new PackageManagerService() -> ServiceManager.addService()
PMS构造方法分析:
1. 创建一个Settings对象,用来存储一些重要的运行时设定,内部定义的mSharedUsers以share user id(如android.userid.system)为key管理一个SharedUserSettings,可以找到所有共享同一个user id的所有package。两个或多个声明了同一种sharedUserIds的APK可共享彼此的数据,并且可运行在同一进程中。(PMS构造会将一些user id如system、phone等加入到Settings,process uid/gid定义在Process.java)
2. 设置installer,Installer内部有一个InstallerConnection对象,此对象会通过socket向installd发送请求,如获取app大小等。
3. 启动一个HandlerThread,将程序的安装和卸载逻辑丢到PackageHandler后台thread做处理。
4. 通过SystemConfig:readPermissions从/etc/permissions/platform.xml等文件中读取相关permission,其中定义了每个permission由具有哪些uid/gid的进程所具备。
<permission name="android.permission.BLUETOOTH_ADMIN" >
<group gid="net_bt_admin" />
</permission>
5. 通过readLpw解析packages.xml得到当前安装的package相关讯息。
· packages.xml:PKMS扫描完目标文件夹后会创建该文件。当系统进行程序安装、卸载和更新等操作时,均会更新该文件。该文件保存了系统中与package相关的一些信息。
· packages.list:描述系统中存在的所有非系统自带的APK的信息。当这些程序有变动时,PKMS就会更新该文件。
· packages-stopped.xml:从系统自带的设置程序中进入应用程序页面,然后在选择强制停止(ForceStop)某个应用时,系统会将该应用的相关信息记录到此文件中。也就是该文件保存系统中被用户强制停止的Package的信息。
6. 将所有的shared library调用Installer的dexopt方法进行优化,将优化过的odex或者oat文件放入dalvik-cache folder下。如果被依赖的库文件发生变化,其cache会删除重新生成,依赖其的jar或者app也需要重新进行dexopt。7. 调用scanPackageLi对/system/framework,/system/priv-app, /system/app等folder下的文件进行扫描,通过PackageParser对AndroidManifest文件进行解析存入不同的数据结构进行维护。
8. 收尾工作,删除临时文件,将之前收集的信息再集中整理一次,比如将有些信息保存到文件中,显示调用GC释放内存等。
[附一]
PackageManagerService相关类图结构:
[附二]
Android UID和GID分别表示User ID和Group ID,Linux用此作权限管理。在Android中多个进程可以通过在Manifest中定义android:shareUserId指定和其他进程相同的user id。
public static final int SYSTEM_UID = 1000;
public static final int PHONE_UID = 1001;
[附三]
framework-res.apk还包含了以下几个常用的Activity。
· ChooserActivity:当多个Activity符合某个Intent的时候,系统会弹出此Activity,由用户选择合适的应用来处理。
· RingtonePickerActivity:铃声选择Activity。
· ShutdownActivity:关机前弹出的选择对话框。
[问题]
1. Android app default 的user id和group id是如何生成的。
[参考资料]
[深入理解Android卷二 全文-第四章]深入理解PackageManagerService
http://blog.csdn.net/innost/article/details/47253179