Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1b35316 authored by Songchun Fan's avatar Songchun Fan Committed by Android (Google) Code Review
Browse files

Merge "Revert "Revert "Revert "[pm] remove circular dependency in init helper""""

parents 3e01ab61 5f075c5b
Loading
Loading
Loading
Loading
+82 −122
Original line number Diff line number Diff line
@@ -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<ScanPartition> 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<ScanPartition> 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<String, File> mExpectingBetter = new ArrayMap<>();
    /* Tracks of any system packages that no longer exist that needs to be pruned. */
    private final List<String> 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<String> mStubSystemApps = new ArrayList<>();

    // TODO(b/198166813): remove PMS dependency
    InitAppsHelper(PackageManagerService pm, ApexManager apexManager,
            InstallPackageHelper installPackageHelper, PackageParser2 packageParser,
            List<ScanPartition> 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<File> getFrameworkResApkSplitFiles() {
@@ -143,7 +118,7 @@ final class InitAppsHelper {

    private List<ScanPartition> getSystemScanPartitions() {
        final List<ScanPartition> 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<ScanPartition> getApexScanPartitions() {
        final List<ScanPartition> scanPartitions = new ArrayList<>();
        final List<ApexManager.ActiveApexInfo> activeApexInfos = mApexManager.getActiveApexInfos();
        final List<ApexManager.ActiveApexInfo> activeApexInfos =
                mPm.mApexManager.getActiveApexInfos();
        for (int i = 0; i < activeApexInfos.size(); i++) {
            final ScanPartition scanPartition = resolveApexToScanPartition(activeApexInfos.get(i));
            if (scanPartition != null) {
@@ -175,119 +151,97 @@ final class InitAppsHelper {
        return null;
    }

    /**
     * Install apps from system dirs.
     */
    @GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
    public OverlayConfig initSystemApps(WatchedArrayMap<String, PackageSetting> packageSettings,
            int[] userIds, long startTime) {
    public OverlayConfig initPackages(
            WatchedArrayMap<String, PackageSetting> 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<String, File> 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()))));
        // Prune any system packages that no longer exist.
        final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<>();
        // Stub packages must either be replaced with full versions in the /data
        // partition or be disabled.
        final List<String> 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<Runnable> unfinishedTasks = mExecutorService.shutdownNow();
        List<Runnable> unfinishedTasks = executorService.shutdownNow();
        if (!unfinishedTasks.isEmpty()) {
            throw new IllegalStateException("Not all tasks finished before calling close: "
                    + unfinishedTasks);
        }
        if (!mIsOnlyCoreApps) {
            fixSystemPackages(userIds);
            logNonSystemAppScanningTime(startTime);
        }
        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,
        if (!mPm.isOnlyCoreApps()) {
            mInstallPackageHelper.cleanupDisabledPackageSettings(possiblyDeletedUpdatedSystemApps,
                    userIds, mScanFlags);
            mInstallPackageHelper.checkExistingBetterPackages(mExpectingBetter,
                mStubSystemApps, mSystemScanFlags, mSystemParseFlags);
                    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(mStubSystemApps, mScanFlags);
    }
            mInstallPackageHelper.installSystemStubPackages(stubSystemApps, mScanFlags);

    @GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
    private void logNonSystemAppScanningTime(long startTime) {
            final int cachedNonSystemApps = PackageCacher.sCachedPackageReadCount.get()
                - mCachedSystemApps;
                    - cachedSystemApps;

        final long dataScanTime = SystemClock.uptimeMillis() - mSystemScanTime - startTime;
        final int dataPackagesCount = mPm.mPackages.size() - mSystemPackagesCount;
            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 (mIsDeviceUpgrading && dataPackagesCount > 0) {
            if (mPm.isDeviceUpgrading() && dataPackagesCount > 0) {
                //CHECKSTYLE:OFF IndentationCheck
                FrameworkStatsLog.write(
                        FrameworkStatsLog.BOOT_TIME_EVENT_DURATION_REPORTED,
@@ -296,6 +250,12 @@ final class InitAppsHelper {
                //CHECKSTYLE:OFF IndentationCheck
            }
        }
        mExpectingBetter.clear();

        mPm.mSettings.pruneRenamedPackagesLPw();
        packageParser.close();
        return overlayConfig;
    }

    /**
     * First part of init dir scanning
@@ -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<File> 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<File> 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);
        }
+15 −15
Original line number Diff line number Diff line
@@ -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<File> 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<ScanResult, Boolean> 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<ScanResult, Boolean> 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);
    }

+10 −10
Original line number Diff line number Diff line
@@ -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<ScanPartition> 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<Integer, Integer> getSystemPackageRescanFlagsAndReparseFlags(File scanFile,
            int systemScanFlags, int systemParseFlags) {
        List<ScanPartition> dirsToScanAsSystem =
                mInitAppsHelper.getDirsToScanAsSystem();
                mInitAndSystemPackageHelper.getDirsToScanAsSystem();
        @ParsingPackageUtils.ParseFlags int reparseFlags = 0;
        @PackageManagerService.ScanFlags int rescanFlags = 0;
        for (int i1 = dirsToScanAsSystem.size() - 1; i1 >= 0; i1--) {
+1 −1

File changed.

Preview size limit exceeded, changes collapsed.

+2 −2

File changed.

Preview size limit exceeded, changes collapsed.