diff --git a/services/core/java/com/android/server/pm/InitAppsHelper.java b/services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java similarity index 64% rename from services/core/java/com/android/server/pm/InitAppsHelper.java rename to services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java index 2fda02db63e5f..06405ae32fcf3 100644 --- a/services/core/java/com/android/server/pm/InitAppsHelper.java +++ b/services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java @@ -32,7 +32,6 @@ import static com.android.server.pm.PackageManagerService.SYSTEM_PARTITIONS; import static com.android.server.pm.PackageManagerService.TAG; import static com.android.server.pm.pkg.parsing.ParsingPackageUtils.PARSE_FRAMEWORK_RES_SPLITS; -import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.parsing.ApkLiteParseUtils; import android.os.Environment; @@ -62,25 +61,14 @@ import java.util.concurrent.ExecutorService; * further cleanup and eventually all the installation/scanning related logic will go to another * class. */ -final class InitAppsHelper { +final class InitAndSystemPackageHelper { private final PackageManagerService mPm; + private final List mDirsToScanAsSystem; private final int mScanFlags; private final int mSystemParseFlags; private final int mSystemScanFlags; private final InstallPackageHelper mInstallPackageHelper; - private final ApexManager mApexManager; - private final PackageParser2 mPackageParser; - private final ExecutorService mExecutorService; - /* Tracks how long system scan took */ - private long mSystemScanTime; - /* Track of the number of cached system apps */ - private int mCachedSystemApps; - /* Track of the number of system apps */ - private int mSystemPackagesCount; - private final boolean mIsDeviceUpgrading; - private final boolean mIsOnlyCoreApps; - private final List mSystemPartitions; /** * Tracks new system packages [received in an OTA] that we expect to @@ -88,34 +76,21 @@ final class InitAppsHelper { * are package location. */ private final ArrayMap mExpectingBetter = new ArrayMap<>(); - /* Tracks of any system packages that no longer exist that needs to be pruned. */ - private final List mPossiblyDeletedUpdatedSystemApps = new ArrayList<>(); - // Tracks of stub packages that must either be replaced with full versions in the /data - // partition or be disabled. - private final List mStubSystemApps = new ArrayList<>(); // TODO(b/198166813): remove PMS dependency - InitAppsHelper(PackageManagerService pm, ApexManager apexManager, - InstallPackageHelper installPackageHelper, PackageParser2 packageParser, - List systemPartitions) { + InitAndSystemPackageHelper(PackageManagerService pm) { mPm = pm; - mApexManager = apexManager; - mInstallPackageHelper = installPackageHelper; - mPackageParser = packageParser; - mSystemPartitions = systemPartitions; + mInstallPackageHelper = new InstallPackageHelper(pm); mDirsToScanAsSystem = getSystemScanPartitions(); - mIsDeviceUpgrading = mPm.isDeviceUpgrading(); - mIsOnlyCoreApps = mPm.isOnlyCoreApps(); // Set flag to monitor and not change apk file paths when scanning install directories. int scanFlags = SCAN_BOOTING | SCAN_INITIAL; - if (mIsDeviceUpgrading || mPm.isFirstBoot()) { + if (mPm.isDeviceUpgrading() || mPm.isFirstBoot()) { mScanFlags = scanFlags | SCAN_FIRST_BOOT_OR_UPGRADE; } else { mScanFlags = scanFlags; } mSystemParseFlags = mPm.getDefParseFlags() | ParsingPackageUtils.PARSE_IS_SYSTEM_DIR; mSystemScanFlags = scanFlags | SCAN_AS_SYSTEM; - mExecutorService = ParallelPackageParser.makeExecutorService(); } private List getFrameworkResApkSplitFiles() { @@ -143,7 +118,7 @@ final class InitAppsHelper { private List getSystemScanPartitions() { final List scanPartitions = new ArrayList<>(); - scanPartitions.addAll(mSystemPartitions); + scanPartitions.addAll(mPm.mInjector.getSystemPartitions()); scanPartitions.addAll(getApexScanPartitions()); Slog.d(TAG, "Directories scanned as system partitions: " + scanPartitions); return scanPartitions; @@ -151,7 +126,8 @@ final class InitAppsHelper { private List getApexScanPartitions() { final List scanPartitions = new ArrayList<>(); - final List activeApexInfos = mApexManager.getActiveApexInfos(); + final List activeApexInfos = + mPm.mApexManager.getActiveApexInfos(); for (int i = 0; i < activeApexInfos.size(); i++) { final ScanPartition scanPartition = resolveApexToScanPartition(activeApexInfos.get(i)); if (scanPartition != null) { @@ -168,133 +144,117 @@ final class InitAppsHelper { if (apexInfo.preInstalledApexPath.getAbsolutePath().equals( sp.getFolder().getAbsolutePath()) || apexInfo.preInstalledApexPath.getAbsolutePath().startsWith( - sp.getFolder().getAbsolutePath() + File.separator)) { + sp.getFolder().getAbsolutePath() + File.separator)) { return new ScanPartition(apexInfo.apexDirectory, sp, SCAN_AS_APK_IN_APEX); } } return null; } - /** - * Install apps from system dirs. - */ - @GuardedBy({"mPm.mInstallLock", "mPm.mLock"}) - public OverlayConfig initSystemApps(WatchedArrayMap packageSettings, - int[] userIds, long startTime) { + public OverlayConfig initPackages( + WatchedArrayMap packageSettings, int[] userIds, + long startTime) { + PackageParser2 packageParser = mPm.mInjector.getScanningCachingPackageParser(); + + ExecutorService executorService = ParallelPackageParser.makeExecutorService(); // Prepare apex package info before scanning APKs, this information is needed when // scanning apk in apex. - mApexManager.scanApexPackagesTraced(mPackageParser, mExecutorService); + mPm.mApexManager.scanApexPackagesTraced(packageParser, executorService); - scanSystemDirs(mPackageParser, mExecutorService); + scanSystemDirs(packageParser, executorService); // Parse overlay configuration files to set default enable state, mutability, and // priority of system overlays. final ArrayMap apkInApexPreInstalledPaths = new ArrayMap<>(); - for (ApexManager.ActiveApexInfo apexInfo : mApexManager.getActiveApexInfos()) { - for (String packageName : mApexManager.getApksInApex(apexInfo.apexModuleName)) { + for (ApexManager.ActiveApexInfo apexInfo : mPm.mApexManager.getActiveApexInfos()) { + for (String packageName : mPm.mApexManager.getApksInApex(apexInfo.apexModuleName)) { apkInApexPreInstalledPaths.put(packageName, apexInfo.preInstalledApexPath); } } - final OverlayConfig overlayConfig = OverlayConfig.initializeSystemInstance( + OverlayConfig overlayConfig = OverlayConfig.initializeSystemInstance( consumer -> mPm.forEachPackage( pkg -> consumer.accept(pkg, pkg.isSystem(), - apkInApexPreInstalledPaths.get(pkg.getPackageName())))); + apkInApexPreInstalledPaths.get(pkg.getPackageName())))); + // Prune any system packages that no longer exist. + final List possiblyDeletedUpdatedSystemApps = new ArrayList<>(); + // Stub packages must either be replaced with full versions in the /data + // partition or be disabled. + final List stubSystemApps = new ArrayList<>(); - if (!mIsOnlyCoreApps) { + if (!mPm.isOnlyCoreApps()) { // do this first before mucking with mPackages for the "expecting better" case - updateStubSystemAppsList(mStubSystemApps); + updateStubSystemAppsList(stubSystemApps); mInstallPackageHelper.prepareSystemPackageCleanUp(packageSettings, - mPossiblyDeletedUpdatedSystemApps, mExpectingBetter, userIds); + possiblyDeletedUpdatedSystemApps, mExpectingBetter, userIds); } - logSystemAppsScanningTime(startTime); - return overlayConfig; - } - - @GuardedBy({"mPm.mInstallLock", "mPm.mLock"}) - private void logSystemAppsScanningTime(long startTime) { - mCachedSystemApps = PackageCacher.sCachedPackageReadCount.get(); + final int cachedSystemApps = PackageCacher.sCachedPackageReadCount.get(); // Remove any shared userIDs that have no associated packages mPm.mSettings.pruneSharedUsersLPw(); - mSystemScanTime = SystemClock.uptimeMillis() - startTime; - mSystemPackagesCount = mPm.mPackages.size(); - Slog.i(TAG, "Finished scanning system apps. Time: " + mSystemScanTime - + " ms, packageCount: " + mSystemPackagesCount + final long systemScanTime = SystemClock.uptimeMillis() - startTime; + final int systemPackagesCount = mPm.mPackages.size(); + Slog.i(TAG, "Finished scanning system apps. Time: " + systemScanTime + + " ms, packageCount: " + systemPackagesCount + " , timePerPackage: " - + (mSystemPackagesCount == 0 ? 0 : mSystemScanTime / mSystemPackagesCount) - + " , cached: " + mCachedSystemApps); - if (mIsDeviceUpgrading && mSystemPackagesCount > 0) { + + (systemPackagesCount == 0 ? 0 : systemScanTime / systemPackagesCount) + + " , cached: " + cachedSystemApps); + if (mPm.isDeviceUpgrading() && systemPackagesCount > 0) { //CHECKSTYLE:OFF IndentationCheck FrameworkStatsLog.write(FrameworkStatsLog.BOOT_TIME_EVENT_DURATION_REPORTED, BOOT_TIME_EVENT_DURATION__EVENT__OTA_PACKAGE_MANAGER_SYSTEM_APP_AVG_SCAN_TIME, - mSystemScanTime / mSystemPackagesCount); + systemScanTime / systemPackagesCount); //CHECKSTYLE:ON IndentationCheck } - } - /** - * Install apps/updates from data dir and fix system apps that are affected. - */ - @GuardedBy({"mPm.mInstallLock", "mPm.mLock"}) - public void initNonSystemApps(@NonNull int[] userIds, long startTime) { - if (!mIsOnlyCoreApps) { + if (!mPm.isOnlyCoreApps()) { EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_DATA_SCAN_START, SystemClock.uptimeMillis()); scanDirTracedLI(mPm.getAppInstallDir(), /* frameworkSplits= */ null, 0, - mScanFlags | SCAN_REQUIRE_KNOWN, - mPackageParser, mExecutorService); + mScanFlags | SCAN_REQUIRE_KNOWN, 0, + packageParser, executorService); + } - List unfinishedTasks = mExecutorService.shutdownNow(); + List unfinishedTasks = executorService.shutdownNow(); if (!unfinishedTasks.isEmpty()) { throw new IllegalStateException("Not all tasks finished before calling close: " + unfinishedTasks); } - if (!mIsOnlyCoreApps) { - fixSystemPackages(userIds); - logNonSystemAppScanningTime(startTime); + + if (!mPm.isOnlyCoreApps()) { + mInstallPackageHelper.cleanupDisabledPackageSettings(possiblyDeletedUpdatedSystemApps, + userIds, mScanFlags); + mInstallPackageHelper.checkExistingBetterPackages(mExpectingBetter, + stubSystemApps, mSystemScanFlags, mSystemParseFlags); + + // Uncompress and install any stubbed system applications. + // This must be done last to ensure all stubs are replaced or disabled. + mInstallPackageHelper.installSystemStubPackages(stubSystemApps, mScanFlags); + + final int cachedNonSystemApps = PackageCacher.sCachedPackageReadCount.get() + - cachedSystemApps; + + final long dataScanTime = SystemClock.uptimeMillis() - systemScanTime - startTime; + final int dataPackagesCount = mPm.mPackages.size() - systemPackagesCount; + Slog.i(TAG, "Finished scanning non-system apps. Time: " + dataScanTime + + " ms, packageCount: " + dataPackagesCount + + " , timePerPackage: " + + (dataPackagesCount == 0 ? 0 : dataScanTime / dataPackagesCount) + + " , cached: " + cachedNonSystemApps); + if (mPm.isDeviceUpgrading() && dataPackagesCount > 0) { + //CHECKSTYLE:OFF IndentationCheck + FrameworkStatsLog.write( + FrameworkStatsLog.BOOT_TIME_EVENT_DURATION_REPORTED, + BOOT_TIME_EVENT_DURATION__EVENT__OTA_PACKAGE_MANAGER_DATA_APP_AVG_SCAN_TIME, + dataScanTime / dataPackagesCount); + //CHECKSTYLE:OFF IndentationCheck + } } mExpectingBetter.clear(); + mPm.mSettings.pruneRenamedPackagesLPw(); - mPackageParser.close(); - } - - /** - * Clean up system packages now that some system package updates have been installed from - * the data dir. Also install system stub packages as the last step. - */ - @GuardedBy({"mPm.mInstallLock", "mPm.mLock"}) - private void fixSystemPackages(@NonNull int[] userIds) { - mInstallPackageHelper.cleanupDisabledPackageSettings(mPossiblyDeletedUpdatedSystemApps, - userIds, mScanFlags); - mInstallPackageHelper.checkExistingBetterPackages(mExpectingBetter, - mStubSystemApps, mSystemScanFlags, mSystemParseFlags); - - // Uncompress and install any stubbed system applications. - // This must be done last to ensure all stubs are replaced or disabled. - mInstallPackageHelper.installSystemStubPackages(mStubSystemApps, mScanFlags); - } - - @GuardedBy({"mPm.mInstallLock", "mPm.mLock"}) - private void logNonSystemAppScanningTime(long startTime) { - final int cachedNonSystemApps = PackageCacher.sCachedPackageReadCount.get() - - mCachedSystemApps; - - final long dataScanTime = SystemClock.uptimeMillis() - mSystemScanTime - startTime; - final int dataPackagesCount = mPm.mPackages.size() - mSystemPackagesCount; - Slog.i(TAG, "Finished scanning non-system apps. Time: " + dataScanTime - + " ms, packageCount: " + dataPackagesCount - + " , timePerPackage: " - + (dataPackagesCount == 0 ? 0 : dataScanTime / dataPackagesCount) - + " , cached: " + cachedNonSystemApps); - if (mIsDeviceUpgrading && dataPackagesCount > 0) { - //CHECKSTYLE:OFF IndentationCheck - FrameworkStatsLog.write( - FrameworkStatsLog.BOOT_TIME_EVENT_DURATION_REPORTED, - BOOT_TIME_EVENT_DURATION__EVENT__OTA_PACKAGE_MANAGER_DATA_APP_AVG_SCAN_TIME, - dataScanTime / dataPackagesCount); - //CHECKSTYLE:OFF IndentationCheck - } + packageParser.close(); + return overlayConfig; } /** @@ -314,14 +274,14 @@ final class InitAppsHelper { continue; } scanDirTracedLI(partition.getOverlayFolder(), /* frameworkSplits= */ null, - mSystemParseFlags, mSystemScanFlags | partition.scanFlag, + mSystemParseFlags, mSystemScanFlags | partition.scanFlag, 0, packageParser, executorService); } List frameworkSplits = getFrameworkResApkSplitFiles(); scanDirTracedLI(frameworkDir, frameworkSplits, mSystemParseFlags | PARSE_FRAMEWORK_RES_SPLITS, - mSystemScanFlags | SCAN_NO_DEX | SCAN_AS_PRIVILEGED, + mSystemScanFlags | SCAN_NO_DEX | SCAN_AS_PRIVILEGED, 0, packageParser, executorService); if (!mPm.mPackages.containsKey("android")) { throw new IllegalStateException( @@ -333,11 +293,11 @@ final class InitAppsHelper { if (partition.getPrivAppFolder() != null) { scanDirTracedLI(partition.getPrivAppFolder(), /* frameworkSplits= */ null, mSystemParseFlags, - mSystemScanFlags | SCAN_AS_PRIVILEGED | partition.scanFlag, + mSystemScanFlags | SCAN_AS_PRIVILEGED | partition.scanFlag, 0, packageParser, executorService); } scanDirTracedLI(partition.getAppFolder(), /* frameworkSplits= */ null, - mSystemParseFlags, mSystemScanFlags | partition.scanFlag, + mSystemParseFlags, mSystemScanFlags | partition.scanFlag, 0, packageParser, executorService); } } @@ -356,11 +316,11 @@ final class InitAppsHelper { @GuardedBy({"mPm.mInstallLock", "mPm.mLock"}) private void scanDirTracedLI(File scanDir, List frameworkSplits, final int parseFlags, int scanFlags, - PackageParser2 packageParser, ExecutorService executorService) { + long currentTime, PackageParser2 packageParser, ExecutorService executorService) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanDir [" + scanDir.getAbsolutePath() + "]"); try { mInstallPackageHelper.installPackagesFromDir(scanDir, frameworkSplits, parseFlags, - scanFlags, packageParser, executorService); + scanFlags, currentTime, packageParser, executorService); } finally { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index 83c84728cb5a1..336da2acca677 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -3030,7 +3030,7 @@ final class InstallPackageHelper { final RemovePackageHelper removePackageHelper = new RemovePackageHelper(mPm); removePackageHelper.removePackageLI(stubPkg, true /*chatty*/); try { - return scanSystemPackageTracedLI(scanFile, parseFlags, scanFlags, null); + return scanSystemPackageTracedLI(scanFile, parseFlags, scanFlags, 0, null); } catch (PackageManagerException e) { Slog.w(TAG, "Failed to install compressed system package:" + stubPkg.getPackageName(), e); @@ -3163,7 +3163,7 @@ final class InstallPackageHelper { | ParsingPackageUtils.PARSE_IS_SYSTEM_DIR; @PackageManagerService.ScanFlags int scanFlags = mPm.getSystemPackageScanFlags(codePath); final AndroidPackage pkg = scanSystemPackageTracedLI( - codePath, parseFlags, scanFlags, null); + codePath, parseFlags, scanFlags, 0 /*currentTime*/, null); PackageSetting pkgSetting = mPm.mSettings.getPackageLPr(pkg.getPackageName()); @@ -3338,7 +3338,7 @@ final class InstallPackageHelper { mRemovePackageHelper.removePackageLI(pkg, true); try { final File codePath = new File(pkg.getPath()); - scanSystemPackageTracedLI(codePath, 0, scanFlags, null); + scanSystemPackageTracedLI(codePath, 0, scanFlags, 0, null); } catch (PackageManagerException e) { Slog.e(TAG, "Failed to parse updated, ex-system package: " + e.getMessage()); @@ -3359,7 +3359,7 @@ final class InstallPackageHelper { @GuardedBy({"mPm.mInstallLock", "mPm.mLock"}) public void installPackagesFromDir(File scanDir, List frameworkSplits, int parseFlags, - int scanFlags, PackageParser2 packageParser, + int scanFlags, long currentTime, PackageParser2 packageParser, ExecutorService executorService) { final File[] files = scanDir.listFiles(); if (ArrayUtils.isEmpty(files)) { @@ -3402,7 +3402,7 @@ final class InstallPackageHelper { parseResult.parsedPackage); } try { - addForInitLI(parseResult.parsedPackage, parseFlags, scanFlags, + addForInitLI(parseResult.parsedPackage, parseFlags, scanFlags, currentTime, null); } catch (PackageManagerException e) { errorCode = e.error; @@ -3465,7 +3465,7 @@ final class InstallPackageHelper { try { final AndroidPackage newPkg = scanSystemPackageTracedLI( - scanFile, reparseFlags, rescanFlags, null); + scanFile, reparseFlags, rescanFlags, 0, null); // We rescanned a stub, add it to the list of stubbed system packages if (newPkg.isStub()) { stubSystemApps.add(packageName); @@ -3479,14 +3479,14 @@ final class InstallPackageHelper { /** * Traces a package scan. - * @see #scanSystemPackageLI(File, int, int, UserHandle) + * @see #scanSystemPackageLI(File, int, int, long, UserHandle) */ @GuardedBy({"mPm.mInstallLock", "mPm.mLock"}) public AndroidPackage scanSystemPackageTracedLI(File scanFile, final int parseFlags, - int scanFlags, UserHandle user) throws PackageManagerException { + int scanFlags, long currentTime, UserHandle user) throws PackageManagerException { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanPackage [" + scanFile.toString() + "]"); try { - return scanSystemPackageLI(scanFile, parseFlags, scanFlags, user); + return scanSystemPackageLI(scanFile, parseFlags, scanFlags, currentTime, user); } finally { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } @@ -3498,7 +3498,7 @@ final class InstallPackageHelper { */ @GuardedBy({"mPm.mInstallLock", "mPm.mLock"}) private AndroidPackage scanSystemPackageLI(File scanFile, int parseFlags, int scanFlags, - UserHandle user) throws PackageManagerException { + long currentTime, UserHandle user) throws PackageManagerException { if (DEBUG_INSTALL) Slog.d(TAG, "Parsing: " + scanFile); Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "parsePackage"); @@ -3514,7 +3514,7 @@ final class InstallPackageHelper { PackageManagerService.renameStaticSharedLibraryPackage(parsedPackage); } - return addForInitLI(parsedPackage, parseFlags, scanFlags, user); + return addForInitLI(parsedPackage, parseFlags, scanFlags, currentTime, user); } /** @@ -3533,11 +3533,11 @@ final class InstallPackageHelper { @GuardedBy({"mPm.mLock", "mPm.mInstallLock"}) private AndroidPackage addForInitLI(ParsedPackage parsedPackage, @ParsingPackageUtils.ParseFlags int parseFlags, - @PackageManagerService.ScanFlags int scanFlags, + @PackageManagerService.ScanFlags int scanFlags, long currentTime, @Nullable UserHandle user) throws PackageManagerException { final Pair scanResultPair = scanSystemPackageLI( - parsedPackage, parseFlags, scanFlags, user); + parsedPackage, parseFlags, scanFlags, currentTime, user); final ScanResult scanResult = scanResultPair.first; boolean shouldHideSystemApp = scanResultPair.second; if (scanResult.mSuccess) { @@ -3715,7 +3715,7 @@ final class InstallPackageHelper { private Pair scanSystemPackageLI(ParsedPackage parsedPackage, @ParsingPackageUtils.ParseFlags int parseFlags, - @PackageManagerService.ScanFlags int scanFlags, + @PackageManagerService.ScanFlags int scanFlags, long currentTime, @Nullable UserHandle user) throws PackageManagerException { final boolean scanSystemPartition = (parseFlags & ParsingPackageUtils.PARSE_IS_SYSTEM_DIR) != 0; @@ -3902,7 +3902,7 @@ final class InstallPackageHelper { } final ScanResult scanResult = scanPackageNewLI(parsedPackage, parseFlags, - scanFlags | SCAN_UPDATE_SIGNATURE, 0 /* currentTime */, user, null); + scanFlags | SCAN_UPDATE_SIGNATURE, currentTime, user, null); return new Pair<>(scanResult, shouldHideSystemApp); } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9d95ead3a3116..3549c9ec2e743 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -944,7 +944,7 @@ public class PackageManagerService extends IPackageManager.Stub private final BroadcastHelper mBroadcastHelper; private final RemovePackageHelper mRemovePackageHelper; private final DeletePackageHelper mDeletePackageHelper; - private final InitAppsHelper mInitAppsHelper; + private final InitAndSystemPackageHelper mInitAndSystemPackageHelper; private final AppDataHelper mAppDataHelper; private final InstallPackageHelper mInstallPackageHelper; private final PreferredActivityHelper mPreferredActivityHelper; @@ -1689,7 +1689,7 @@ public class PackageManagerService extends IPackageManager.Stub mAppDataHelper = testParams.appDataHelper; mInstallPackageHelper = testParams.installPackageHelper; mRemovePackageHelper = testParams.removePackageHelper; - mInitAppsHelper = testParams.initAndSystemPackageHelper; + mInitAndSystemPackageHelper = testParams.initAndSystemPackageHelper; mDeletePackageHelper = testParams.deletePackageHelper; mPreferredActivityHelper = testParams.preferredActivityHelper; mResolveIntentHelper = testParams.resolveIntentHelper; @@ -1836,8 +1836,7 @@ public class PackageManagerService extends IPackageManager.Stub mAppDataHelper = new AppDataHelper(this); mInstallPackageHelper = new InstallPackageHelper(this, mAppDataHelper); mRemovePackageHelper = new RemovePackageHelper(this, mAppDataHelper); - mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper, - mInjector.getScanningCachingPackageParser(), mInjector.getSystemPartitions()); + mInitAndSystemPackageHelper = new InitAndSystemPackageHelper(this); mDeletePackageHelper = new DeletePackageHelper(this, mRemovePackageHelper, mAppDataHelper); mSharedLibraries.setDeletePackageHelper(mDeletePackageHelper); @@ -1967,8 +1966,8 @@ public class PackageManagerService extends IPackageManager.Stub mIsEngBuild, mIsUserDebugBuild, mIncrementalVersion); final int[] userIds = mUserManager.getUserIds(); - mOverlayConfig = mInitAppsHelper.initSystemApps(packageSettings, userIds, startTime); - mInitAppsHelper.initNonSystemApps(userIds, startTime); + mOverlayConfig = mInitAndSystemPackageHelper.initPackages(packageSettings, + userIds, startTime); // Resolve the storage manager. mStorageManagerPackage = getStorageManagerPackageName(); @@ -8677,7 +8676,7 @@ public class PackageManagerService extends IPackageManager.Stub } boolean isExpectingBetter(String packageName) { - return mInitAppsHelper.isExpectingBetter(packageName); + return mInitAndSystemPackageHelper.isExpectingBetter(packageName); } int getDefParseFlags() { @@ -8780,12 +8779,13 @@ public class PackageManagerService extends IPackageManager.Stub } boolean isOverlayMutable(String packageName) { - return mOverlayConfig.isMutable(packageName); + return (mOverlayConfig != null ? mOverlayConfig + : OverlayConfig.getSystemInstance()).isMutable(packageName); } @ScanFlags int getSystemPackageScanFlags(File codePath) { List dirsToScanAsSystem = - mInitAppsHelper.getDirsToScanAsSystem(); + mInitAndSystemPackageHelper.getDirsToScanAsSystem(); @PackageManagerService.ScanFlags int scanFlags = SCAN_AS_SYSTEM; for (int i = dirsToScanAsSystem.size() - 1; i >= 0; i--) { ScanPartition partition = dirsToScanAsSystem.get(i); @@ -8803,7 +8803,7 @@ public class PackageManagerService extends IPackageManager.Stub Pair getSystemPackageRescanFlagsAndReparseFlags(File scanFile, int systemScanFlags, int systemParseFlags) { List dirsToScanAsSystem = - mInitAppsHelper.getDirsToScanAsSystem(); + mInitAndSystemPackageHelper.getDirsToScanAsSystem(); @ParsingPackageUtils.ParseFlags int reparseFlags = 0; @PackageManagerService.ScanFlags int rescanFlags = 0; for (int i1 = dirsToScanAsSystem.size() - 1; i1 >= 0; i1--) { diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java b/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java index 00ca4ae8b7346..1caa76d2435aa 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java @@ -108,7 +108,7 @@ public final class PackageManagerServiceTestParams { public AppDataHelper appDataHelper; public InstallPackageHelper installPackageHelper; public RemovePackageHelper removePackageHelper; - public InitAppsHelper initAndSystemPackageHelper; + public InitAndSystemPackageHelper initAndSystemPackageHelper; public DeletePackageHelper deletePackageHelper; public PreferredActivityHelper preferredActivityHelper; public ResolveIntentHelper resolveIntentHelper; diff --git a/services/core/java/com/android/server/pm/StorageEventHelper.java b/services/core/java/com/android/server/pm/StorageEventHelper.java index 1372098507366..bb7e55a4bf408 100644 --- a/services/core/java/com/android/server/pm/StorageEventHelper.java +++ b/services/core/java/com/android/server/pm/StorageEventHelper.java @@ -32,6 +32,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackagePartitions; import android.content.pm.UserInfo; import android.content.pm.VersionedPackage; +import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import android.os.Environment; import android.os.FileUtils; import android.os.UserHandle; @@ -47,7 +48,6 @@ import android.util.Slog; import com.android.internal.policy.AttributeCache; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.pkg.PackageStateInternal; -import com.android.server.pm.pkg.parsing.ParsingPackageUtils; import java.io.File; import java.util.ArrayList; @@ -150,7 +150,7 @@ public final class StorageEventHelper extends StorageEventListener { final AndroidPackage pkg; try { pkg = installPackageHelper.scanSystemPackageTracedLI( - ps.getPath(), parseFlags, SCAN_INITIAL, null); + ps.getPath(), parseFlags, SCAN_INITIAL, 0, null); loaded.add(pkg); } catch (PackageManagerException e) {