diff options
| author | 2020-07-07 16:24:02 +0800 | |
|---|---|---|
| committer | 2020-07-08 04:24:34 +0000 | |
| commit | 85a4d96f255aef2ae2566858f57ff459cb43648c (patch) | |
| tree | b4bd8bb0db967e0e08d31b6ec0925425e75f7a1f | |
| parent | 038d147eab0c23bb60336d4d3293360582c38eb4 (diff) | |
ApexManager: Allow duplicating VNDK APEX package names
Don't throw when the duplicating APEX names are VNDK.
Explicitly allow duplicating builtin packages if they are VNDK APEX.
For example, aosp_bonito has its VNDK APEX installed in the vendor
partition and GSI installed its VNDK APEX in system partition.
When booting with GSI as the system image, there would be two APEXes
with the same name "com.android.vndk.v30", and only one is activated
by apexd:
- (inactive) /vendor/apex/com.android.vndk.current.on_vendor.apex
- (active) /system/apex/com.android.vndk.current.apex
Bug: 160611268
Test: Flash aosp_bonito / vendor.img + aosp_arm64 / system.img and boot
to home screen
Test: atest CtsStagedInstallHostTestCases
Test: atest FrameworksServicesTests:PackageParserTest
Test: atest FrameworksServicesTests:ApexManagerTest
Test: adb shell dumpsys package
Test: | com.android.vndk.current.apex is active
Test: | com.android.vndk.current.on_vendor.apex is inactive
Change-Id: I9f01ba075f26d22aa5101dc3da69d53c5a8b6202
| -rw-r--r-- | services/core/java/com/android/server/pm/ApexManager.java | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java index d9d949154ce1..e12cb8f533a7 100644 --- a/services/core/java/com/android/server/pm/ApexManager.java +++ b/services/core/java/com/android/server/pm/ApexManager.java @@ -77,6 +77,8 @@ public abstract class ApexManager { public static final int MATCH_ACTIVE_PACKAGE = 1 << 0; static final int MATCH_FACTORY_PACKAGE = 1 << 1; + private static final String VNDK_APEX_MODULE_NAME_PREFIX = "com.android.vndk."; + private static final Singleton<ApexManager> sApexManagerSingleton = new Singleton<ApexManager>() { @Override @@ -521,7 +523,9 @@ public abstract class ApexManager { activePackagesSet.add(packageInfo.packageName); } if (ai.isFactory) { - if (factoryPackagesSet.contains(packageInfo.packageName)) { + // Don't throw when the duplicating APEX is VNDK APEX + if (factoryPackagesSet.contains(packageInfo.packageName) + && !ai.moduleName.startsWith(VNDK_APEX_MODULE_NAME_PREFIX)) { throw new IllegalStateException( "Two factory packages have the same name: " + packageInfo.packageName); |