From 1f36a2166b5bfe9afa2a6379573fda58868c6e28 Mon Sep 17 00:00:00 2001 From: Jakub Adamek Date: Mon, 17 Oct 2016 14:53:40 +0100 Subject: [PATCH] Search for RRO 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: I7acff1b7f0e153830924047349f003295648a53b --- core/jni/android_util_AssetManager.cpp | 15 +++++++-------- include/androidfw/AssetManager.h | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index da9415d10b731..52b7ef4f7fa37 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -187,18 +187,17 @@ static void verifySystemIdmaps() argv[argc++] = AssetManager::IDMAP_DIR; // Directories to scan for overlays: if OVERLAY_SKU_DIR_PROPERTY is defined, - // use OVERLAY_DIR/ if exists, otherwise - // use OVERLAY_DIR if exists. + // use OVERLAY_DIR/ in addition to OVERLAY_DIR. char subdir[PROP_VALUE_MAX]; int len = __system_property_get(AssetManager::OVERLAY_SKU_DIR_PROPERTY, subdir); - String8 overlayPath; if (len > 0) { - overlayPath = String8(AssetManager::OVERLAY_DIR) + "/" + subdir; - } else { - overlayPath = String8(AssetManager::OVERLAY_DIR); + String8 overlayPath = String8(AssetManager::OVERLAY_DIR) + "/" + subdir; + if (stat(overlayPath.string(), &st) == 0) { + argv[argc++] = overlayPath.string(); + } } - if (stat(overlayPath.string(), &st) == 0) { - argv[argc++] = overlayPath.string(); + if (stat(AssetManager::OVERLAY_DIR, &st) == 0) { + argv[argc++] = AssetManager::OVERLAY_DIR; } // Finally, invoke idmap (if any overlay directory exists) diff --git a/include/androidfw/AssetManager.h b/include/androidfw/AssetManager.h index 099d82eb564fe..31b692d6624e3 100644 --- a/include/androidfw/AssetManager.h +++ b/include/androidfw/AssetManager.h @@ -74,7 +74,7 @@ public: static const char* OVERLAY_DIR; /* * If OVERLAY_SKU_DIR_PROPERTY is set, search for runtime resource overlay - * APKs in OVERLAY_DIR/ rather than in + * APKs in OVERLAY_DIR/ in addition to * OVERLAY_DIR. */ static const char* OVERLAY_SKU_DIR_PROPERTY;