apk安装过程

最近的项目里底层的东西比较少,客户须要改上层的一些东西(apk的预装)。java

apk是android package的缩写,即apk安装包。android

 

一、系统应用安装过程:app

PackageManagerService处理各类应用的安装、卸载和管理等工做,开机时由systemService启动此服务。server

该文件通常存放在:frameworks/base/services/java/com/android/server/PackageManagerService.javacmd

                                frameworks/base/services/java/com/android/server/pm/PackageManagerService.javaservice

首先扫描“system/framework”目录下的jar包遍历

scanDirLI(mFrameworkDir, PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR, scanMode | SCAN_NO_DEX, 0 )项目

 

接着扫描"system/app"下的各系统应用di

scanDir(mSystemAppDir, PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR, scanMode, 0)文件

 

而后扫描"data/app"目录,即用户安装的第三方应用

scanDirLI(mAppInstallDir, 0, scanMode, 0)

 

最后扫描"data/app-private"目录,即安装DRM保护的APK文件

scanDirLI(mDrmAppPrivateInstallDir, 0, scanMode | SCAN_RORWARD_LOCKED)

 

安装应用的过程:

一、scanDir(Filedir, int flags, int scanMode) 遍历安装指定目录下的文件

二、scanPackageLI(FilescanFile, File destCodeFIle, FiledestResourceFile, int parseFlags, int scanMode) 安装package文件

三、scanPackageLI(File scanFile, FIle destCodeFile,  , , ,)经过解析安装包parsePackage获取到安装包的信息结构

四、mInstaller.install(, ,) 实现文件复制的安装过程(framework/base/cmds/installd/installd.c)