diff options
| author | 2024-10-09 09:20:09 +0200 | |
|---|---|---|
| committer | 2024-11-05 20:05:20 +0000 | |
| commit | 0c3ad80f2de7bfd6d8fb9bda73e96fd4026401b3 (patch) | |
| tree | 25b80ec814d59896bef0ddad4e808c6de1ee2e5a | |
| parent | 238801c3ab0ec5896bf8d7e2f2fc3cf03880c32b (diff) | |
Allow packages to be enabled depending on sku value
This change allows packages to be enabled on boot depending
on the sku of the device. This enables the same product image
to be used on different skus.
Example:
Packages are listed here in a disabled state:
/product/etc/sysconfig/disabled-in-sku.xml
<?xml version="1.0" encoding="utf-8"?>
<config>
<disabled-in-sku package="com.sony.product1.app"/>
<disabled-in-sku package="com.sony.product2.app"/>
</config>
Then enabled depending on the sku values read from
"ro.boot.hardware.sku"
e.g. an sku of '00001':
/product/etc/sysconfig/sku_00001/enabled-in-sku-override.xml
<?xml version="1.0" encoding="utf-8"?>
<config>
<enabled-in-sku-override package="com.sony.product2.app"/>
</config>
Status of apps after customisation:
product2 app - enabled
product1 app - disabled and not visible to PackageManager
Bug: 376275452
Test: atest FrameworksServicesTests:com.android.server.systemconfig.SystemConfigTest
Change-Id: Id1418beda7e264cab90086836c32785341fb5aac
| -rw-r--r-- | services/core/java/com/android/server/SystemConfig.java | 19 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java | 34 |
2 files changed, 53 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/SystemConfig.java b/services/core/java/com/android/server/SystemConfig.java index 9b987e9850c4..8c83ad70625a 100644 --- a/services/core/java/com/android/server/SystemConfig.java +++ b/services/core/java/com/android/server/SystemConfig.java @@ -1319,6 +1319,7 @@ public class SystemConfig { } XmlUtils.skipCurrentTag(parser); } break; + case "disabled-in-sku": case "disabled-until-used-preinstalled-carrier-app": { if (allowAppConfigs) { String pkgname = parser.getAttributeValue(null, "package"); @@ -1335,6 +1336,24 @@ public class SystemConfig { } XmlUtils.skipCurrentTag(parser); } break; + case "enabled-in-sku-override": { + if (allowAppConfigs) { + String pkgname = parser.getAttributeValue(null, "package"); + if (pkgname == null) { + Slog.w(TAG, + "<" + name + "> without " + + "package in " + permFile + " at " + + parser.getPositionDescription()); + } else if (!mDisabledUntilUsedPreinstalledCarrierApps.remove(pkgname)) { + Slog.w(TAG, + "<" + name + "> packagename:" + pkgname + " not included" + + "in disabled-in-sku"); + } + } else { + logNotAllowedInPartition(name, permFile, parser); + } + XmlUtils.skipCurrentTag(parser); + } break; case "privapp-permissions": { if (allowPrivappPermissions) { // privapp permissions from system, apex, vendor, product and diff --git a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java index 3bc089fb3f5d..842c441e09f2 100644 --- a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java +++ b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java @@ -691,6 +691,40 @@ public class SystemConfigTest { assertThat(actual).isEqualTo(expected); } + /** + * Tests that readPermissions works correctly for the tags: + * disabled-in-sku, enabled-in-sku-override. + * I.e. that disabled-in-sku add package to block list and + * enabled-in-sku-override removes package from the list. + */ + @Test + public void testDisablePackageInSku() throws Exception { + final String disable_in_sku = + "<config>\n" + + " <disabled-in-sku package=\"com.sony.product1.app\"/>\n" + + " <disabled-in-sku package=\"com.sony.product2.app\"/>\n" + + "</config>\n"; + + final String enable_in_sku_override = + "<config>\n" + + " <enabled-in-sku-override package=\"com.sony.product2.app\"/>\n" + + "</config>\n"; + + final File folder1 = createTempSubfolder("folder1"); + createTempFile(folder1, "permissionFile1.xml", disable_in_sku); + + final File folder2 = createTempSubfolder("folder2"); + createTempFile(folder2, "permissionFile2.xml", enable_in_sku_override); + + readPermissions(folder1, /* Grant all permission flags */ ~0); + readPermissions(folder2, /* Grant all permission flags */ ~0); + + final ArraySet<String> blocklist = mSysConfig.getDisabledUntilUsedPreinstalledCarrierApps(); + + assertThat(blocklist).contains("com.sony.product1.app"); + assertThat(blocklist).doesNotContain("com.sony.product2.app"); + } + private void parseSharedLibraries(String contents) throws IOException { File folder = createTempSubfolder("permissions_folder"); createTempFile(folder, "permissions.xml", contents); |