Android应用程序安装过程源代码分析(3)
16lz
2021-12-04
Step 7.PackageManagerService.main
这个函数定义在frameworks/base/services/java/com/android/server/PackageManagerService.java文件中: [cpp] view plain copy- classPackageManagerServiceextendsIPackageManager.Stub{
- ......
- publicstaticfinalIPackageManagermain(Contextcontext,booleanfactoryTest){
- PackageManagerServicem=newPackageManagerService(context,factoryTest);
- ServiceManager.addService("package",m);
- returnm;
- }
- ......
- }
- classPackageManagerServiceextendsIPackageManager.Stub{
- ......
- publicPackageManagerService(Contextcontext,booleanfactoryTest){
- ......
- synchronized(mInstallLock){
- synchronized(mPackages){
- ......
- FiledataDir=Environment.getDataDirectory();
- mAppDataDir=newFile(dataDir,"data");
- mSecureAppDataDir=newFile(dataDir,"secure/data");
- mDrmAppPrivateInstallDir=newFile(dataDir,"app-private");
- ......
- mFrameworkDir=newFile(Environment.getRootDirectory(),"framework");
- mDalvikCacheDir=newFile(dataDir,"dalvik-cache");
- ......
- //Findbaseframeworks(resourcepackageswithoutcode).
- mFrameworkInstallObserver=newAppDirObserver(
- mFrameworkDir.getPath(),OBSERVER_EVENTS,true);
- mFrameworkInstallObserver.startWatching();
- scanDirLI(mFrameworkDir,PackageParser.PARSE_IS_SYSTEM
- |PackageParser.PARSE_IS_SYSTEM_DIR,
- scanMode|SCAN_NO_DEX,0);
- //Collectallsystempackages.
- mSystemAppDir=newFile(Environment.getRootDirectory(),"app");
- mSystemInstallObserver=newAppDirObserver(
- mSystemAppDir.getPath(),OBSERVER_EVENTS,true);
- mSystemInstallObserver.startWatching();
- scanDirLI(mSystemAppDir,PackageParser.PARSE_IS_SYSTEM
- |PackageParser.PARSE_IS_SYSTEM_DIR,scanMode,0);
- //Collectallvendorpackages.
- mVendorAppDir=newFile("/vendor/app");
- mVendorInstallObserver=newAppDirObserver(
- mVendorAppDir.getPath(),OBSERVER_EVENTS,true);
- mVendorInstallObserver.startWatching();
- scanDirLI(mVendorAppDir,PackageParser.PARSE_IS_SYSTEM
- |PackageParser.PARSE_IS_SYSTEM_DIR,scanMode,0);
- mAppInstallObserver=newAppDirObserver(
- mAppInstallDir.getPath(),OBSERVER_EVENTS,false);
- mAppInstallObserver.startWatching();
- scanDirLI(mAppInstallDir,0,scanMode,0);
- mDrmAppInstallObserver=newAppDirObserver(
- mDrmAppPrivateInstallDir.getPath(),OBSERVER_EVENTS,false);
- mDrmAppInstallObserver.startWatching();
- scanDirLI(mDrmAppPrivateInstallDir,PackageParser.PARSE_FORWARD_LOCK,
- scanMode,0);
- ......
- }
- }
- }
- ......
- }
/system/framework /system/app /vendor/app /data/app /data/app-private Step 8.PackageManagerService.scanDirLI
这个函数定义在frameworks/base/services/java/com/android/server/PackageManagerService.java文件中: [java] view plain copy
- classPackageManagerServiceextendsIPackageManager.Stub{
- ......
- privatevoidscanDirLI(Filedir,intflags,intscanMode,longcurrentTime){
- String[]files=dir.list();
- ......
- inti;
- for(i=0;i<files.length;i++){
- Filefile=newFile(dir,files[i]);
- if(!isPackageFilename(files[i])){
- //Ignoreentrieswhicharenotapk's
- continue;
- }
- PackageParser.Packagepkg=scanPackageLI(file,
- flags|PackageParser.PARSE_MUST_BE_APK,scanMode,currentTime);
- //Don'tmessaroundwithappsinsystempartition.
- if(pkg==null&&(flags&PackageParser.PARSE_IS_SYSTEM)==0&&
- mLastScanError==PackageManager.INSTALL_FAILED_INVALID_APK){
- //Deletetheapk
- Slog.w(TAG,"Cleaningupfailedinstallof"+file);
- file.delete();
- }
- }
- }
- ......
- }
这个函数定义在frameworks/base/services/java/com/android/server/PackageManagerService.java文件中: [java] view plain copy
- classPackageManagerServiceextendsIPackageManager.Stub{
- ......
- privatePackageParser.PackagescanPackageLI(FilescanFile,
- intparseFlags,intscanMode,longcurrentTime){
- ......
- StringscanPath=scanFile.getPath();
- parseFlags|=mDefParseFlags;
- PackageParserpp=newPackageParser(scanPath);
- ......
- finalPackageParser.Packagepkg=pp.parsePackage(scanFile,
- scanPath,mMetrics,parseFlags);
- ......
- returnscanPackageLI(pkg,parseFlags,scanMode|SCAN_UPDATE_SIGNATURE,currentTime);
- }
- ......
- }
更多相关文章
- ContentProvider 翻译
- 网络时间同步
- Android获取手机信息
- android studio 常见问题
- 关于标准android中视频播放器中的快进和快退的步长时间设置
- OpenGL,Android注意事项初始化顺序 NullPointer
- Android(安卓)NDK 开发
- Linux系统Android(安卓)SDK 下载版本,报错Warning: File /root/.a
- android之android.os.NetworkOnMainThreadException错误