From 4a6e2466713e50d642b375b621265013d73e5d8e Mon Sep 17 00:00:00 2001 From: Jakub Adamek Date: Mon, 17 Oct 2016 14:55:36 +0100 Subject: [PATCH] Search for RRO in Java both in SKU subdir and in vendor/overlay Currently, if the "ro.boot.vendor.overlay.subdir" property is set, we only search in the subdir. It seems more powerful to search both in there and in the standard /vendor/overlay directory. Also, RRO packages have the "priority" attribute in the attribute in AndroidManifest.xml which serves for disambiguation. Bug: 32202741 Change-Id: I9ef44b8ca4ac0e92ba02e25b3672c6b274fe4639 --- .../com/android/server/pm/PackageManagerService.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 8419b98d3bc9..986bae9005e5 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -464,8 +464,8 @@ public class PackageManagerService extends IPackageManager.Stub { private static final String VENDOR_OVERLAY_DIR = "/vendor/overlay"; /** - * If VENDOR_OVERLAY_SKU_PROPERTY is set, search for runtime resource overlay APKs in - * VENDOR_OVERLAY_DIR/ rather than in + * If VENDOR_OVERLAY_SKU_PROPERTY is set, search for runtime resource overlay APKs also in + * VENDOR_OVERLAY_DIR/ in addition to * VENDOR_OVERLAY_DIR. */ private static final String VENDOR_OVERLAY_SKU_PROPERTY = "ro.boot.vendor.overlay.sku"; @@ -2271,18 +2271,17 @@ public class PackageManagerService extends IPackageManager.Stub { } } - // Collect vendor overlay packages. - // (Do this before scanning any apps.) + // Collect vendor overlay packages. (Do this before scanning any apps.) // For security and version matching reason, only consider // overlay packages if they reside in the right directory. - File vendorOverlayDir; String overlaySkuDir = SystemProperties.get(VENDOR_OVERLAY_SKU_PROPERTY); if (!overlaySkuDir.isEmpty()) { - vendorOverlayDir = new File(VENDOR_OVERLAY_DIR, overlaySkuDir); - } else { - vendorOverlayDir = new File(VENDOR_OVERLAY_DIR); + scanDirTracedLI(new File(VENDOR_OVERLAY_DIR, overlaySkuDir), mDefParseFlags + | PackageParser.PARSE_IS_SYSTEM + | PackageParser.PARSE_IS_SYSTEM_DIR + | PackageParser.PARSE_TRUSTED_OVERLAY, scanFlags | SCAN_TRUSTED_OVERLAY, 0); } - scanDirTracedLI(vendorOverlayDir, mDefParseFlags + scanDirTracedLI(new File(VENDOR_OVERLAY_DIR), mDefParseFlags | PackageParser.PARSE_IS_SYSTEM | PackageParser.PARSE_IS_SYSTEM_DIR | PackageParser.PARSE_TRUSTED_OVERLAY, scanFlags | SCAN_TRUSTED_OVERLAY, 0); -- 2.11.0