1.PackageMS 相关框架类
2.PackageMS 启动过程
2.1 # SystemServer.java
/** 291 * The main entry point from zygote. 292 */ 293 public static void main(String[] args) { 294 new SystemServer().run(); 295 }
上面是SystemServer的主函数。
private void run() {
// Start services. 427 try { 428 traceBeginAndSlog("StartServices"); 429 startBootstrapServices(); // 在这个里面启动PMS 430 startCoreServices(); 431 startOtherServices(); 432 SystemServerInitThreadPool.shutdown(); 433 } catch (Throwable ex) { 434 Slog.e("System", "******************************************"); 435 Slog.e("System", "************ Failure starting system services", ex); 436 throw ex; 437 } finally { 438 traceEnd(); 439 }
}
private void startBootstrapServices(){
...
traceBeginAndSlog("StartPackageManagerService"); 628 mPackageManagerService = PackageManagerService.main(mSystemContext, installer, 629 mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore); 630 mFirstBoot = mPackageManagerService.isFirstBoot(); 631 mPackageManager = mSystemContext.getPackageManager();
...
}
2.2 SystemServer
/** 1018 * organized. 1019 */ 1020 private void startOtherServices(@NonNull TimingsTraceAndSlog t) {
...
t.traceBegin("StartBootPhaseSystemServicesReady"); 2167 mSystemServiceManager.startBootPhase(t, SystemService.PHASE_SYSTEM_SERVICES_READY); 2168 t.traceEnd();
............
t.traceBegin("MakePackageManagerServiceReady"); 2238 mPackageManagerService.systemReady(); 2239 t.traceEnd(); 2240
....
}
2.3 PackageMS
frameworks/base/services/core/java/com/android/server/pm/
public static PackageManagerService main(Context context, Installer installer, 2570 boolean factoryTest, boolean onlyCore) {
。。。
PackageManagerService m = new PackageManagerService(injector, onlyCore, factoryTest); 2607 t.traceEnd(); // "create package manager"
. 。。。。。。。。。。。。
m.installWhitelistedSystemPackages(); 2644 ServiceManager.addService("package", m); //核心 2645 final PackageManagerNative pmn = m.new PackageManagerNative(); 2646 ServiceManager.addService("package_native", pmn); 2647 return m;
。。。。。。。。。。。。
}
2.4 PackageMS 初始化
从:PackageManagerService
public PackageManagerService(Injector injector, boolean onlyCore, boolean factoryTest) {
//创建设置,从这里来的
(i, pm) -> 2590 new Settings(Environment.getDataDirectory(), 2591 i.getPermissionManagerServiceInternal().getPermissionSettings(), 2592 lock),
mSettings = injector.getSettings();
//ystem phone log nfc bluetooth shell 添加到Setting
t.traceBegin("addSharedUsers"); 2885 mSettings.addSharedUserLPw("android.uid.system", Process.SYSTEM_UID, 2886 ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); 2887 mSettings.addSharedUserLPw("android.uid.phone", RADIO_UID, 2888 ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); 2889 mSettings.addSharedUserLPw("android.uid.log", LOG_UID, 2890 ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); 2891 mSettings.addSharedUserLPw("android.uid.nfc", NFC_UID, 2892 ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); 2893 mSettings.addSharedUserLPw("android.uid.bluetooth", BLUETOOTH_UID, 2894 ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); 2895 mSettings.addSharedUserLPw("android.uid.shell", SHELL_UID, 2896 ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); 2897 mSettings.addSharedUserLPw("android.uid.se", SE_UID, 2898 ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); 2899 mSettings.addSharedUserLPw("android.uid.networkstack", NETWORKSTACK_UID, 2900 ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); 2901 t.traceEnd();
.........................................
//
mPackageDexOptimizer = new PackageDexOptimizer(mInstaller, mInstallLock, mContext, 2921 "*dexopt*");
................................
//3 初始化 SystemConfig
t.traceBegin("get system config"); 2932 SystemConfig systemConfig = SystemConfig.getInstance(); 2933 mAvailableFeatures = systemConfig.getAvailableFeatures(); 2934 ApplicationPackageManager.invalidateHasSystemFeatureCache(); 2935 t.traceEnd();
// CHECKSTYLE:OFF IndentationCheck 2957 synchronized (mInstallLock) {
创建 PackageHandler
mHandlerThread = new ServiceThread(TAG, 2961 Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/); 2962 mHandlerThread.start(); 2963 mHandler = new PackageHandler(mHandlerThread.getLooper()); 2964 mProcessLoggingHandler = new ProcessLoggingHandler(); 2965 Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT); 2966 mInstantAppRegistry = new InstantAppRegistry(this);
...............................................
//开始扫描
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_SYSTEM_SCAN_START, 3032 startTime); 3033 3034 final String bootClassPath = System.getenv("BOOTCLASSPATH"); 3035 final String systemServerClassPath = System.getenv("SYSTEMSERVERCLASSPATH");
。。。。。。。。。。。。。。。。。。。。
//对满足条件的 Jar Apk 执行 dex 优化
//处理非系统 App //data/app 、 自定义app 路径 // PMS_DATA_SCAN_START
if (!mOnlyCore) { 3550 mRequiredVerifierPackage = getRequiredButNotReallyRequiredVerifierLPr(); 3551 mOptionalVerifierPackage = getOptionalVerifierLPr(); 3552 mRequiredInstallerPackage = getRequiredInstallerLPr(); 3553 mRequiredUninstallerPackage = getRequiredUninstallerLPr(); 3554 mIntentFilterVerifierComponent = getIntentFilterVerifierComponentNameLPr(); 3555 if (mIntentFilterVerifierComponent != null) { 3556 mIntentFilt
}
}
}
PackageManagerService
........