Installd service定义在init.rc,class为main,由init进程启动,Java framework通过socket installd同其进行沟通。
程序安装过程:
1. 将apk文件拷贝到目标路径/data/local/tmp或者/sdcard/tmp。
2. 进行verification,把相关信息发送给指定的Verification程序(另外一个APK),由它对要安装的APK进行检查。
3. 执行pm命令,pm是一个脚本文件,最终会通过PKMS的Binder客户端调用installPackageWithVerification以完成后续的安装工作。
4. 清理,删除tmp目录下apk文件,因为PKMS在安装过程中会将该APK复制一份到/data/app目录。
installPackageWithVerification
1. PMS发送INIT_COPY message到PackageHandler。
2. INIT_COPY中检查DefaultContainerService是否有启动,然后看是否需要排队,如果可以安装就发送MCS_BOUND进行安装。
3. copyApk将app文件拷贝到/data/app目录下。
[附一]
1service installd /system/bin/installd
2 class main
3 socket installd stream 600 system system
[参考资料]
http://blog.csdn.net/innost/article/details/47253179
http://blog.csdn.net/yangwen123/article/details/11104397