summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yo Chiang <yochiang@google.com> 2020-07-07 16:24:02 +0800
committer Yi-yo Chiang <yochiang@google.com> 2020-07-08 04:24:34 +0000
commit85a4d96f255aef2ae2566858f57ff459cb43648c (patch)
treeb4bd8bb0db967e0e08d31b6ec0925425e75f7a1f
parent038d147eab0c23bb60336d4d3293360582c38eb4 (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.java6
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);