diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 46bf74a02303f..87ad5adcbd83e 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -3488,6 +3488,10 @@
false
+
+
+
+
true
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index ede9d5b301f97..cc795413d86b6 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3404,4 +3404,7 @@
+
+
+
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index c2d679858925c..f30372b1b237a 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -21161,6 +21161,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
CarrierAppUtils.disableCarrierAppsUntilPrivileged(mContext.getOpPackageName(), this,
mContext.getContentResolver(), UserHandle.USER_SYSTEM);
+ disableSkuSpecificApps();
+
// Read the compatibilty setting when the system is ready.
boolean compatibilityModeEnabled = android.provider.Settings.Global.getInt(
mContext.getContentResolver(),
@@ -21948,6 +21950,28 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
}
}
+ //TODO: b/111402650
+ private void disableSkuSpecificApps() {
+ if (!mIsUpgrade && !mFirstBoot) {
+ return;
+ }
+ String apkList[] = mContext.getResources().getStringArray(
+ R.array.config_disableApksUnlessMatchedSku_apk_list);
+ String skuArray[] = mContext.getResources().getStringArray(
+ R.array.config_disableApkUnlessMatchedSku_skus_list);
+ if (ArrayUtils.isEmpty(apkList)) {
+ return;
+ }
+ String sku = SystemProperties.get("ro.boot.hardware.sku");
+ if (!TextUtils.isEmpty(sku) && ArrayUtils.contains(skuArray, sku)) {
+ return;
+ }
+ for (String packageName : apkList) {
+ setSystemAppHiddenUntilInstalled(packageName, true);
+ setSystemAppInstallState(packageName, false, ActivityManager.getCurrentUser());
+ }
+ }
+
private void dumpProto(FileDescriptor fd) {
final ProtoOutputStream proto = new ProtoOutputStream(fd);