[pm] remove circular dependency in init helper
mPm.mOverlayConfig is needed during the initial non-system app scanning. Therefore we have to assign it before the start of non-system app scanning. This CL fixes that. + minor refactors BUG: 211822574 Test: boots Change-Id: Idff0026038f876dba5dcf434d40a8f6999a43e3c
This commit is contained in:
@@ -31,6 +31,7 @@ import static com.android.server.pm.PackageManagerService.SCAN_REQUIRE_KNOWN;
|
||||
import static com.android.server.pm.PackageManagerService.SYSTEM_PARTITIONS;
|
||||
import static com.android.server.pm.PackageManagerService.TAG;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.content.pm.parsing.ParsingPackageUtils;
|
||||
import android.os.Environment;
|
||||
@@ -59,14 +60,25 @@ import java.util.concurrent.ExecutorService;
|
||||
* further cleanup and eventually all the installation/scanning related logic will go to another
|
||||
* class.
|
||||
*/
|
||||
final class InitAndSystemPackageHelper {
|
||||
final class InitAppsHelper {
|
||||
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
|
||||
@@ -74,26 +86,39 @@ final class InitAndSystemPackageHelper {
|
||||
* 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
|
||||
InitAndSystemPackageHelper(PackageManagerService pm) {
|
||||
InitAppsHelper(PackageManagerService pm, ApexManager apexManager,
|
||||
InstallPackageHelper installPackageHelper, PackageParser2 packageParser,
|
||||
List<ScanPartition> systemPartitions) {
|
||||
mPm = pm;
|
||||
mInstallPackageHelper = new InstallPackageHelper(pm);
|
||||
mApexManager = apexManager;
|
||||
mInstallPackageHelper = installPackageHelper;
|
||||
mPackageParser = packageParser;
|
||||
mSystemPartitions = systemPartitions;
|
||||
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 (mPm.isDeviceUpgrading() || mPm.isFirstBoot()) {
|
||||
if (mIsDeviceUpgrading || 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<ScanPartition> getSystemScanPartitions() {
|
||||
final List<ScanPartition> scanPartitions = new ArrayList<>();
|
||||
scanPartitions.addAll(mPm.mInjector.getSystemPartitions());
|
||||
scanPartitions.addAll(mSystemPartitions);
|
||||
scanPartitions.addAll(getApexScanPartitions());
|
||||
Slog.d(TAG, "Directories scanned as system partitions: " + scanPartitions);
|
||||
return scanPartitions;
|
||||
@@ -101,8 +126,7 @@ final class InitAndSystemPackageHelper {
|
||||
|
||||
private List<ScanPartition> getApexScanPartitions() {
|
||||
final List<ScanPartition> scanPartitions = new ArrayList<>();
|
||||
final List<ApexManager.ActiveApexInfo> activeApexInfos =
|
||||
mPm.mApexManager.getActiveApexInfos();
|
||||
final List<ApexManager.ActiveApexInfo> activeApexInfos = mApexManager.getActiveApexInfos();
|
||||
for (int i = 0; i < activeApexInfos.size(); i++) {
|
||||
final ScanPartition scanPartition = resolveApexToScanPartition(activeApexInfos.get(i));
|
||||
if (scanPartition != null) {
|
||||
@@ -119,116 +143,133 @@ final class InitAndSystemPackageHelper {
|
||||
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;
|
||||
}
|
||||
|
||||
public OverlayConfig initPackages(
|
||||
WatchedArrayMap<String, PackageSetting> packageSettings, int[] userIds,
|
||||
long startTime) {
|
||||
PackageParser2 packageParser = mPm.mInjector.getScanningCachingPackageParser();
|
||||
|
||||
ExecutorService executorService = ParallelPackageParser.makeExecutorService();
|
||||
/**
|
||||
* Install apps from system dirs.
|
||||
*/
|
||||
@GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
|
||||
public OverlayConfig initSystemApps(WatchedArrayMap<String, PackageSetting> packageSettings,
|
||||
int[] userIds, long startTime) {
|
||||
// Prepare apex package info before scanning APKs, this information is needed when
|
||||
// scanning apk in apex.
|
||||
mPm.mApexManager.scanApexPackagesTraced(packageParser, executorService);
|
||||
mApexManager.scanApexPackagesTraced(mPackageParser, mExecutorService);
|
||||
|
||||
scanSystemDirs(packageParser, executorService);
|
||||
scanSystemDirs(mPackageParser, mExecutorService);
|
||||
// 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 : mPm.mApexManager.getActiveApexInfos()) {
|
||||
for (String packageName : mPm.mApexManager.getApksInApex(apexInfo.apexModuleName)) {
|
||||
for (ApexManager.ActiveApexInfo apexInfo : mApexManager.getActiveApexInfos()) {
|
||||
for (String packageName : mApexManager.getApksInApex(apexInfo.apexModuleName)) {
|
||||
apkInApexPreInstalledPaths.put(packageName, apexInfo.preInstalledApexPath);
|
||||
}
|
||||
}
|
||||
OverlayConfig overlayConfig = OverlayConfig.initializeSystemInstance(
|
||||
final 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<>();
|
||||
apkInApexPreInstalledPaths.get(pkg.getPackageName()))));
|
||||
|
||||
if (!mPm.isOnlyCoreApps()) {
|
||||
if (!mIsOnlyCoreApps) {
|
||||
// do this first before mucking with mPackages for the "expecting better" case
|
||||
updateStubSystemAppsList(stubSystemApps);
|
||||
updateStubSystemAppsList(mStubSystemApps);
|
||||
mInstallPackageHelper.prepareSystemPackageCleanUp(packageSettings,
|
||||
possiblyDeletedUpdatedSystemApps, mExpectingBetter, userIds);
|
||||
mPossiblyDeletedUpdatedSystemApps, mExpectingBetter, userIds);
|
||||
}
|
||||
|
||||
final int cachedSystemApps = PackageCacher.sCachedPackageReadCount.get();
|
||||
logSystemAppsScanningTime(startTime);
|
||||
return overlayConfig;
|
||||
}
|
||||
|
||||
@GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
|
||||
private void logSystemAppsScanningTime(long startTime) {
|
||||
mCachedSystemApps = PackageCacher.sCachedPackageReadCount.get();
|
||||
|
||||
// Remove any shared userIDs that have no associated packages
|
||||
mPm.mSettings.pruneSharedUsersLPw();
|
||||
final long systemScanTime = SystemClock.uptimeMillis() - startTime;
|
||||
final int systemPackagesCount = mPm.mPackages.size();
|
||||
Slog.i(TAG, "Finished scanning system apps. Time: " + systemScanTime
|
||||
+ " ms, packageCount: " + systemPackagesCount
|
||||
mSystemScanTime = SystemClock.uptimeMillis() - startTime;
|
||||
mSystemPackagesCount = mPm.mPackages.size();
|
||||
Slog.i(TAG, "Finished scanning system apps. Time: " + mSystemScanTime
|
||||
+ " ms, packageCount: " + mSystemPackagesCount
|
||||
+ " , timePerPackage: "
|
||||
+ (systemPackagesCount == 0 ? 0 : systemScanTime / systemPackagesCount)
|
||||
+ " , cached: " + cachedSystemApps);
|
||||
if (mPm.isDeviceUpgrading() && systemPackagesCount > 0) {
|
||||
+ (mSystemPackagesCount == 0 ? 0 : mSystemScanTime / mSystemPackagesCount)
|
||||
+ " , cached: " + mCachedSystemApps);
|
||||
if (mIsDeviceUpgrading && mSystemPackagesCount > 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,
|
||||
systemScanTime / systemPackagesCount);
|
||||
mSystemScanTime / mSystemPackagesCount);
|
||||
//CHECKSTYLE:ON IndentationCheck
|
||||
}
|
||||
}
|
||||
|
||||
if (!mPm.isOnlyCoreApps()) {
|
||||
/**
|
||||
* 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) {
|
||||
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_DATA_SCAN_START,
|
||||
SystemClock.uptimeMillis());
|
||||
scanDirTracedLI(mPm.getAppInstallDir(), 0, mScanFlags | SCAN_REQUIRE_KNOWN, 0,
|
||||
packageParser, executorService);
|
||||
scanDirTracedLI(mPm.getAppInstallDir(), 0, mScanFlags | SCAN_REQUIRE_KNOWN,
|
||||
mPackageParser, mExecutorService);
|
||||
|
||||
}
|
||||
|
||||
List<Runnable> unfinishedTasks = executorService.shutdownNow();
|
||||
List<Runnable> unfinishedTasks = mExecutorService.shutdownNow();
|
||||
if (!unfinishedTasks.isEmpty()) {
|
||||
throw new IllegalStateException("Not all tasks finished before calling close: "
|
||||
+ unfinishedTasks);
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
if (!mIsOnlyCoreApps) {
|
||||
fixSystemPackages(userIds);
|
||||
logNonSystemAppScanningTime(startTime);
|
||||
}
|
||||
mExpectingBetter.clear();
|
||||
|
||||
mPm.mSettings.pruneRenamedPackagesLPw();
|
||||
packageParser.close();
|
||||
return overlayConfig;
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -248,12 +289,12 @@ final class InitAndSystemPackageHelper {
|
||||
continue;
|
||||
}
|
||||
scanDirTracedLI(partition.getOverlayFolder(), mSystemParseFlags,
|
||||
mSystemScanFlags | partition.scanFlag, 0,
|
||||
mSystemScanFlags | partition.scanFlag,
|
||||
packageParser, executorService);
|
||||
}
|
||||
|
||||
scanDirTracedLI(frameworkDir, mSystemParseFlags,
|
||||
mSystemScanFlags | SCAN_NO_DEX | SCAN_AS_PRIVILEGED, 0,
|
||||
mSystemScanFlags | SCAN_NO_DEX | SCAN_AS_PRIVILEGED,
|
||||
packageParser, executorService);
|
||||
if (!mPm.mPackages.containsKey("android")) {
|
||||
throw new IllegalStateException(
|
||||
@@ -264,11 +305,11 @@ final class InitAndSystemPackageHelper {
|
||||
final ScanPartition partition = mDirsToScanAsSystem.get(i);
|
||||
if (partition.getPrivAppFolder() != null) {
|
||||
scanDirTracedLI(partition.getPrivAppFolder(), mSystemParseFlags,
|
||||
mSystemScanFlags | SCAN_AS_PRIVILEGED | partition.scanFlag, 0,
|
||||
mSystemScanFlags | SCAN_AS_PRIVILEGED | partition.scanFlag,
|
||||
packageParser, executorService);
|
||||
}
|
||||
scanDirTracedLI(partition.getAppFolder(), mSystemParseFlags,
|
||||
mSystemScanFlags | partition.scanFlag, 0,
|
||||
mSystemScanFlags | partition.scanFlag,
|
||||
packageParser, executorService);
|
||||
}
|
||||
}
|
||||
@@ -286,11 +327,11 @@ final class InitAndSystemPackageHelper {
|
||||
|
||||
@GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
|
||||
private void scanDirTracedLI(File scanDir, final int parseFlags, int scanFlags,
|
||||
long currentTime, PackageParser2 packageParser, ExecutorService executorService) {
|
||||
PackageParser2 packageParser, ExecutorService executorService) {
|
||||
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanDir [" + scanDir.getAbsolutePath() + "]");
|
||||
try {
|
||||
mInstallPackageHelper.installPackagesFromDir(scanDir, parseFlags, scanFlags,
|
||||
currentTime, packageParser, executorService);
|
||||
packageParser, executorService);
|
||||
} finally {
|
||||
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
|
||||
}
|
||||
@@ -3055,7 +3055,7 @@ final class InstallPackageHelper {
|
||||
final RemovePackageHelper removePackageHelper = new RemovePackageHelper(mPm);
|
||||
removePackageHelper.removePackageLI(stubPkg, true /*chatty*/);
|
||||
try {
|
||||
return scanSystemPackageTracedLI(scanFile, parseFlags, scanFlags, 0, null);
|
||||
return scanSystemPackageTracedLI(scanFile, parseFlags, scanFlags, null);
|
||||
} catch (PackageManagerException e) {
|
||||
Slog.w(TAG, "Failed to install compressed system package:" + stubPkg.getPackageName(),
|
||||
e);
|
||||
@@ -3188,7 +3188,7 @@ final class InstallPackageHelper {
|
||||
| ParsingPackageUtils.PARSE_IS_SYSTEM_DIR;
|
||||
@PackageManagerService.ScanFlags int scanFlags = mPm.getSystemPackageScanFlags(codePath);
|
||||
final AndroidPackage pkg = scanSystemPackageTracedLI(
|
||||
codePath, parseFlags, scanFlags, 0 /*currentTime*/, null);
|
||||
codePath, parseFlags, scanFlags, null);
|
||||
|
||||
PackageSetting pkgSetting = mPm.mSettings.getPackageLPr(pkg.getPackageName());
|
||||
|
||||
@@ -3363,7 +3363,7 @@ final class InstallPackageHelper {
|
||||
mRemovePackageHelper.removePackageLI(pkg, true);
|
||||
try {
|
||||
final File codePath = new File(pkg.getPath());
|
||||
scanSystemPackageTracedLI(codePath, 0, scanFlags, 0, null);
|
||||
scanSystemPackageTracedLI(codePath, 0, scanFlags, null);
|
||||
} catch (PackageManagerException e) {
|
||||
Slog.e(TAG, "Failed to parse updated, ex-system package: "
|
||||
+ e.getMessage());
|
||||
@@ -3384,7 +3384,7 @@ final class InstallPackageHelper {
|
||||
|
||||
@GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
|
||||
public void installPackagesFromDir(File scanDir, int parseFlags, int scanFlags,
|
||||
long currentTime, PackageParser2 packageParser, ExecutorService executorService) {
|
||||
PackageParser2 packageParser, ExecutorService executorService) {
|
||||
final File[] files = scanDir.listFiles();
|
||||
if (ArrayUtils.isEmpty(files)) {
|
||||
Log.d(TAG, "No files in app dir " + scanDir);
|
||||
@@ -3426,7 +3426,7 @@ final class InstallPackageHelper {
|
||||
parseResult.parsedPackage);
|
||||
}
|
||||
try {
|
||||
addForInitLI(parseResult.parsedPackage, parseFlags, scanFlags, currentTime,
|
||||
addForInitLI(parseResult.parsedPackage, parseFlags, scanFlags,
|
||||
null);
|
||||
} catch (PackageManagerException e) {
|
||||
errorCode = e.error;
|
||||
@@ -3489,7 +3489,7 @@ final class InstallPackageHelper {
|
||||
|
||||
try {
|
||||
final AndroidPackage newPkg = scanSystemPackageTracedLI(
|
||||
scanFile, reparseFlags, rescanFlags, 0, null);
|
||||
scanFile, reparseFlags, rescanFlags, null);
|
||||
// We rescanned a stub, add it to the list of stubbed system packages
|
||||
if (newPkg.isStub()) {
|
||||
stubSystemApps.add(packageName);
|
||||
@@ -3503,14 +3503,14 @@ final class InstallPackageHelper {
|
||||
|
||||
/**
|
||||
* Traces a package scan.
|
||||
* @see #scanSystemPackageLI(File, int, int, long, UserHandle)
|
||||
* @see #scanSystemPackageLI(File, int, int, UserHandle)
|
||||
*/
|
||||
@GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
|
||||
public AndroidPackage scanSystemPackageTracedLI(File scanFile, final int parseFlags,
|
||||
int scanFlags, long currentTime, UserHandle user) throws PackageManagerException {
|
||||
int scanFlags, UserHandle user) throws PackageManagerException {
|
||||
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanPackage [" + scanFile.toString() + "]");
|
||||
try {
|
||||
return scanSystemPackageLI(scanFile, parseFlags, scanFlags, currentTime, user);
|
||||
return scanSystemPackageLI(scanFile, parseFlags, scanFlags, user);
|
||||
} finally {
|
||||
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
|
||||
}
|
||||
@@ -3522,7 +3522,7 @@ final class InstallPackageHelper {
|
||||
*/
|
||||
@GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
|
||||
private AndroidPackage scanSystemPackageLI(File scanFile, int parseFlags, int scanFlags,
|
||||
long currentTime, UserHandle user) throws PackageManagerException {
|
||||
UserHandle user) throws PackageManagerException {
|
||||
if (DEBUG_INSTALL) Slog.d(TAG, "Parsing: " + scanFile);
|
||||
|
||||
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "parsePackage");
|
||||
@@ -3538,7 +3538,7 @@ final class InstallPackageHelper {
|
||||
PackageManagerService.renameStaticSharedLibraryPackage(parsedPackage);
|
||||
}
|
||||
|
||||
return addForInitLI(parsedPackage, parseFlags, scanFlags, currentTime, user);
|
||||
return addForInitLI(parsedPackage, parseFlags, scanFlags, user);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3557,11 +3557,11 @@ final class InstallPackageHelper {
|
||||
@GuardedBy({"mPm.mLock", "mPm.mInstallLock"})
|
||||
private AndroidPackage addForInitLI(ParsedPackage parsedPackage,
|
||||
@ParsingPackageUtils.ParseFlags int parseFlags,
|
||||
@PackageManagerService.ScanFlags int scanFlags, long currentTime,
|
||||
@PackageManagerService.ScanFlags int scanFlags,
|
||||
@Nullable UserHandle user) throws PackageManagerException {
|
||||
|
||||
final Pair<ScanResult, Boolean> scanResultPair = scanSystemPackageLI(
|
||||
parsedPackage, parseFlags, scanFlags, currentTime, user);
|
||||
parsedPackage, parseFlags, scanFlags, user);
|
||||
final ScanResult scanResult = scanResultPair.first;
|
||||
boolean shouldHideSystemApp = scanResultPair.second;
|
||||
if (scanResult.mSuccess) {
|
||||
@@ -3739,7 +3739,7 @@ final class InstallPackageHelper {
|
||||
|
||||
private Pair<ScanResult, Boolean> scanSystemPackageLI(ParsedPackage parsedPackage,
|
||||
@ParsingPackageUtils.ParseFlags int parseFlags,
|
||||
@PackageManagerService.ScanFlags int scanFlags, long currentTime,
|
||||
@PackageManagerService.ScanFlags int scanFlags,
|
||||
@Nullable UserHandle user) throws PackageManagerException {
|
||||
final boolean scanSystemPartition =
|
||||
(parseFlags & ParsingPackageUtils.PARSE_IS_SYSTEM_DIR) != 0;
|
||||
@@ -3926,7 +3926,7 @@ final class InstallPackageHelper {
|
||||
}
|
||||
|
||||
final ScanResult scanResult = scanPackageNewLI(parsedPackage, parseFlags,
|
||||
scanFlags | SCAN_UPDATE_SIGNATURE, currentTime, user, null);
|
||||
scanFlags | SCAN_UPDATE_SIGNATURE, 0 /* currentTime */, user, null);
|
||||
return new Pair<>(scanResult, shouldHideSystemApp);
|
||||
}
|
||||
|
||||
|
||||
@@ -241,7 +241,6 @@ import com.android.server.pm.pkg.PackageUserStateInternal;
|
||||
import com.android.server.pm.pkg.SuspendParams;
|
||||
import com.android.server.pm.pkg.mutate.PackageStateMutator;
|
||||
import com.android.server.pm.pkg.mutate.PackageStateWrite;
|
||||
import com.android.server.pm.pkg.mutate.PackageUserStateWrite;
|
||||
import com.android.server.pm.verify.domain.DomainVerificationManagerInternal;
|
||||
import com.android.server.pm.verify.domain.DomainVerificationService;
|
||||
import com.android.server.pm.verify.domain.proxy.DomainVerificationProxy;
|
||||
@@ -965,7 +964,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
private final BroadcastHelper mBroadcastHelper;
|
||||
private final RemovePackageHelper mRemovePackageHelper;
|
||||
private final DeletePackageHelper mDeletePackageHelper;
|
||||
private final InitAndSystemPackageHelper mInitAndSystemPackageHelper;
|
||||
private final InitAppsHelper mInitAppsHelper;
|
||||
private final AppDataHelper mAppDataHelper;
|
||||
private final InstallPackageHelper mInstallPackageHelper;
|
||||
private final PreferredActivityHelper mPreferredActivityHelper;
|
||||
@@ -1701,7 +1700,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
mAppDataHelper = testParams.appDataHelper;
|
||||
mInstallPackageHelper = testParams.installPackageHelper;
|
||||
mRemovePackageHelper = testParams.removePackageHelper;
|
||||
mInitAndSystemPackageHelper = testParams.initAndSystemPackageHelper;
|
||||
mInitAppsHelper = testParams.initAndSystemPackageHelper;
|
||||
mDeletePackageHelper = testParams.deletePackageHelper;
|
||||
mPreferredActivityHelper = testParams.preferredActivityHelper;
|
||||
mResolveIntentHelper = testParams.resolveIntentHelper;
|
||||
@@ -1845,7 +1844,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
mAppDataHelper = new AppDataHelper(this);
|
||||
mInstallPackageHelper = new InstallPackageHelper(this, mAppDataHelper);
|
||||
mRemovePackageHelper = new RemovePackageHelper(this, mAppDataHelper);
|
||||
mInitAndSystemPackageHelper = new InitAndSystemPackageHelper(this);
|
||||
mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper,
|
||||
mInjector.getScanningPackageParser(), mInjector.getSystemPartitions());
|
||||
mDeletePackageHelper = new DeletePackageHelper(this, mRemovePackageHelper,
|
||||
mAppDataHelper);
|
||||
mSharedLibraries.setDeletePackageHelper(mDeletePackageHelper);
|
||||
@@ -1977,8 +1977,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
mIsEngBuild, mIsUserDebugBuild, mIncrementalVersion);
|
||||
|
||||
final int[] userIds = mUserManager.getUserIds();
|
||||
mOverlayConfig = mInitAndSystemPackageHelper.initPackages(packageSettings,
|
||||
userIds, startTime);
|
||||
mOverlayConfig = mInitAppsHelper.initSystemApps(packageSettings, userIds, startTime);
|
||||
mInitAppsHelper.initNonSystemApps(userIds, startTime);
|
||||
|
||||
// Resolve the storage manager.
|
||||
mStorageManagerPackage = getStorageManagerPackageName();
|
||||
@@ -9147,7 +9147,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
|
||||
boolean isExpectingBetter(String packageName) {
|
||||
return mInitAndSystemPackageHelper.isExpectingBetter(packageName);
|
||||
return mInitAppsHelper.isExpectingBetter(packageName);
|
||||
}
|
||||
|
||||
int getDefParseFlags() {
|
||||
@@ -9256,7 +9256,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
|
||||
@ScanFlags int getSystemPackageScanFlags(File codePath) {
|
||||
List<ScanPartition> dirsToScanAsSystem =
|
||||
mInitAndSystemPackageHelper.getDirsToScanAsSystem();
|
||||
mInitAppsHelper.getDirsToScanAsSystem();
|
||||
@PackageManagerService.ScanFlags int scanFlags = SCAN_AS_SYSTEM;
|
||||
for (int i = dirsToScanAsSystem.size() - 1; i >= 0; i--) {
|
||||
ScanPartition partition = dirsToScanAsSystem.get(i);
|
||||
@@ -9274,7 +9274,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
Pair<Integer, Integer> getSystemPackageRescanFlagsAndReparseFlags(File scanFile,
|
||||
int systemScanFlags, int systemParseFlags) {
|
||||
List<ScanPartition> dirsToScanAsSystem =
|
||||
mInitAndSystemPackageHelper.getDirsToScanAsSystem();
|
||||
mInitAppsHelper.getDirsToScanAsSystem();
|
||||
@ParsingPackageUtils.ParseFlags int reparseFlags = 0;
|
||||
@PackageManagerService.ScanFlags int rescanFlags = 0;
|
||||
for (int i1 = dirsToScanAsSystem.size() - 1; i1 >= 0; i1--) {
|
||||
|
||||
@@ -106,7 +106,7 @@ public final class PackageManagerServiceTestParams {
|
||||
public AppDataHelper appDataHelper;
|
||||
public InstallPackageHelper installPackageHelper;
|
||||
public RemovePackageHelper removePackageHelper;
|
||||
public InitAndSystemPackageHelper initAndSystemPackageHelper;
|
||||
public InitAppsHelper initAndSystemPackageHelper;
|
||||
public DeletePackageHelper deletePackageHelper;
|
||||
public PreferredActivityHelper preferredActivityHelper;
|
||||
public ResolveIntentHelper resolveIntentHelper;
|
||||
|
||||
@@ -150,7 +150,7 @@ public final class StorageEventHelper extends StorageEventListener {
|
||||
final AndroidPackage pkg;
|
||||
try {
|
||||
pkg = installPackageHelper.scanSystemPackageTracedLI(
|
||||
ps.getPath(), parseFlags, SCAN_INITIAL, 0, null);
|
||||
ps.getPath(), parseFlags, SCAN_INITIAL, null);
|
||||
loaded.add(pkg);
|
||||
|
||||
} catch (PackageManagerException e) {
|
||||
|
||||
Reference in New Issue
Block a user