summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Todd Kennedy <toddke@google.com> 2015-06-22 14:10:27 -0700
committer Todd Kennedy <toddke@google.com> 2015-06-23 11:47:19 -0700
commitc293d3ad1a4fbbf616d4dfb041eb9cbf45262b45 (patch)
treeb7879956198eb29031a1c794c986774c870cfffd
parent77b093824fac57255dcd181db662f8f5729fe1cc (diff)
Skip upgrade keys for adopted storage
Define a new scan flag to control whether or not we're performing an initial scan for packages. On internal storage, an intial scan occurs during every boot. For adopted storage, an intial scan occurs immediately after the adopted volume is mounted or whenever an application is moved. Bug: 21815906 Change-Id: Ieda9668230597346bce9ee25ecfa204f931bcef6
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java11
1 files changed, 8 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 06e27fc55f31..d75ca5941220 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -306,6 +306,7 @@ public class PackageManagerService extends IPackageManager.Stub {
static final int SCAN_DELETE_DATA_ON_FAILURES = 1<<10;
static final int SCAN_REQUIRE_KNOWN = 1<<12;
static final int SCAN_MOVE = 1<<13;
+ static final int SCAN_INITIAL = 1<<14;
static final int REMOVE_CHATTY = 1<<16;
@@ -1805,7 +1806,7 @@ public class PackageManagerService extends IPackageManager.Stub {
// Set flag to monitor and not change apk file paths when
// scanning install directories.
- final int scanFlags = SCAN_NO_PATHS | SCAN_DEFER_DEX | SCAN_BOOTING;
+ final int scanFlags = SCAN_NO_PATHS | SCAN_DEFER_DEX | SCAN_BOOTING | SCAN_INITIAL;
final ArraySet<String> alreadyDexOpted = new ArraySet<String>();
@@ -11154,7 +11155,7 @@ public class PackageManagerService extends IPackageManager.Stub {
private boolean shouldCheckUpgradeKeySetLP(PackageSetting oldPs, int scanFlags) {
// Can't rotate keys during boot or if sharedUser.
- if (oldPs == null || (scanFlags&SCAN_BOOTING) != 0 || oldPs.sharedUser != null
+ if (oldPs == null || (scanFlags&SCAN_INITIAL) != 0 || oldPs.sharedUser != null
|| !oldPs.keySetData.isUsingUpgradeKeySets()) {
return false;
}
@@ -11538,6 +11539,10 @@ public class PackageManagerService extends IPackageManager.Stub {
|| (args.volumeUuid != null));
boolean replace = false;
int scanFlags = SCAN_NEW_INSTALL | SCAN_UPDATE_SIGNATURE;
+ if (args.move != null) {
+ // moving a complete application; perfom an initial scan on the new install location
+ scanFlags |= SCAN_INITIAL;
+ }
// Result object to be returned
res.returnCode = PackageManager.INSTALL_SUCCEEDED;
@@ -14651,7 +14656,7 @@ public class PackageManagerService extends IPackageManager.Stub {
for (PackageSetting ps : packages) {
final PackageParser.Package pkg;
try {
- pkg = scanPackageLI(ps.codePath, parseFlags, 0, 0, null);
+ pkg = scanPackageLI(ps.codePath, parseFlags, SCAN_INITIAL, 0L, null);
loaded.add(pkg.applicationInfo);
} catch (PackageManagerException e) {
Slog.w(TAG, "Failed to scan " + ps.codePath + ": " + e.getMessage());