From eb403e7d372fc3cd7c1da4f6f8e24b681d96c451 Mon Sep 17 00:00:00 2001 From: Winson Date: Mon, 7 Feb 2022 11:41:08 -0800 Subject: Isolate IPackageManager implementation To avoid leaking IPackageManager methods directly into PackageManagerService, moves the IPM implementation into an inner class similar to PackageManagerInternal. This will help enforce snapshot consistency by ensuring that all non-IPM PMS methods can always take in a Computer instance to re-use. Bug: 217961172 Test: presubmit Change-Id: Ibf7bd3d1d90a40786279763ba8d62eb9348bb760 --- services/java/com/android/server/SystemServer.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'services/java/com') diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 294dc8941983..fa2850a5157d 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -41,6 +41,7 @@ import android.app.usage.UsageStatsManagerInternal; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.content.pm.IPackageManager; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; @@ -1225,12 +1226,15 @@ public final class SystemServer implements Dumpable { mSystemServiceManager.startService(domainVerificationService); t.traceEnd(); + IPackageManager iPackageManager; t.traceBegin("StartPackageManagerService"); try { Watchdog.getInstance().pauseWatchingCurrentThread("packagemanagermain"); - mPackageManagerService = PackageManagerService.main(mSystemContext, installer, - domainVerificationService, mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, - mOnlyCore); + Pair pmsPair = PackageManagerService.main( + mSystemContext, installer, domainVerificationService, + mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore); + mPackageManagerService = pmsPair.first; + iPackageManager = pmsPair.second; } finally { Watchdog.getInstance().resumeWatchingCurrentThread("packagemanagermain"); } @@ -1238,7 +1242,7 @@ public final class SystemServer implements Dumpable { // Now that the package manager has started, register the dex load reporter to capture any // dex files loaded by system server. // These dex files will be optimized by the BackgroundDexOptService. - SystemServerDexLoadReporter.configureSystemServerDexReporter(mPackageManagerService); + SystemServerDexLoadReporter.configureSystemServerDexReporter(iPackageManager); mFirstBoot = mPackageManagerService.isFirstBoot(); mPackageManager = mSystemContext.getPackageManager(); -- cgit v1.2.3