最近的項目裏底層的東西比較少,客戶須要改上層的一些東西(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)