summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/pm/PackageManager.java3
-rw-r--r--core/java/android/content/pm/PackageParser.java31
-rw-r--r--services/core/java/com/android/server/pm/SharedUidMigration.java14
-rw-r--r--services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java6
4 files changed, 32 insertions, 22 deletions
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index f4bc1616da2b..2915d852cc26 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -121,6 +121,9 @@ public abstract class PackageManager {
/** {@hide} */
public static final boolean APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE = true;
+ /** {@hide} */
+ public static final boolean ENABLE_SHARED_UID_MIGRATION = true;
+
/**
* This exception is thrown when a given package, application, or component
* name cannot be found.
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index e914432630f7..4d4a57db84be 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1944,19 +1944,26 @@ public class PackageParser {
TypedArray sa = res.obtainAttributes(parser,
com.android.internal.R.styleable.AndroidManifest);
- String str = sa.getNonConfigurationString(
- com.android.internal.R.styleable.AndroidManifest_sharedUserId, 0);
- if (str != null && str.length() > 0) {
- String nameError = validateName(str, true, true);
- if (nameError != null && !"android".equals(pkg.packageName)) {
- outError[0] = "<manifest> specifies bad sharedUserId name \""
- + str + "\": " + nameError;
- mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID;
- return null;
+ int maxSdkVersion = 0;
+ if (PackageManager.ENABLE_SHARED_UID_MIGRATION) {
+ maxSdkVersion = sa.getInteger(
+ com.android.internal.R.styleable.AndroidManifest_sharedUserMaxSdkVersion, 0);
+ }
+ if (maxSdkVersion == 0 || maxSdkVersion >= Build.VERSION.RESOURCES_SDK_INT) {
+ String str = sa.getNonConfigurationString(
+ com.android.internal.R.styleable.AndroidManifest_sharedUserId, 0);
+ if (str != null && str.length() > 0) {
+ String nameError = validateName(str, true, true);
+ if (nameError != null && !"android".equals(pkg.packageName)) {
+ outError[0] = "<manifest> specifies bad sharedUserId name \""
+ + str + "\": " + nameError;
+ mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID;
+ return null;
+ }
+ pkg.mSharedUserId = str.intern();
+ pkg.mSharedUserLabel = sa.getResourceId(
+ com.android.internal.R.styleable.AndroidManifest_sharedUserLabel, 0);
}
- pkg.mSharedUserId = str.intern();
- pkg.mSharedUserLabel = sa.getResourceId(
- com.android.internal.R.styleable.AndroidManifest_sharedUserLabel, 0);
}
pkg.installLocation = sa.getInteger(
diff --git a/services/core/java/com/android/server/pm/SharedUidMigration.java b/services/core/java/com/android/server/pm/SharedUidMigration.java
index a7d5e9550149..e44ef662efff 100644
--- a/services/core/java/com/android/server/pm/SharedUidMigration.java
+++ b/services/core/java/com/android/server/pm/SharedUidMigration.java
@@ -17,6 +17,7 @@
package com.android.server.pm;
import android.annotation.IntDef;
+import android.content.pm.PackageManager;
import android.os.Build;
import android.os.SystemProperties;
@@ -59,22 +60,15 @@ public final class SharedUidMigration {
@Retention(RetentionPolicy.SOURCE)
public @interface Strategy {}
+ @Strategy
private static final int DEFAULT = BEST_EFFORT;
/**
- * All shared UID migration is disabled.
- * This is not a strategy that can be set with system properties.
- * To disable shared UID migration, change {@link #DEFAULT} to this value.
- */
- private static final int DISABLED = 0;
-
- /**
* Whether shared UID migration is fully disabled. Disabled means the sharedUserMaxSdkVersion
* attribute will be directly ignored in the parsing phase.
*/
- @SuppressWarnings("ConstantConditions")
public static boolean isDisabled() {
- return DEFAULT == DISABLED;
+ return !PackageManager.ENABLE_SHARED_UID_MIGRATION;
}
/**
@@ -88,7 +82,7 @@ public final class SharedUidMigration {
final int s = SystemProperties.getInt(PROPERTY_KEY, DEFAULT);
// No transition strategies can be used (http://b/221088088)
- if (s > BEST_EFFORT || s <= DISABLED) {
+ if (s > BEST_EFFORT || s < NEW_INSTALL_ONLY) {
return DEFAULT;
}
return s;
diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
index 63469cb24f2f..124df47345ae 100644
--- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
+++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
@@ -122,6 +122,12 @@ public class PackageInfoUtils {
info.isStub = pkg.isStub();
info.coreApp = pkg.isCoreApp();
+ if (!pkgSetting.hasSharedUser()) {
+ // It is possible that this shared UID app has left
+ info.sharedUserId = null;
+ info.sharedUserLabel = 0;
+ }
+
if ((flags & PackageManager.GET_ACTIVITIES) != 0) {
final int N = pkg.getActivities().size();
if (N > 0) {