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 <overlay>
attribute in AndroidManifest.xml which serves for disambiguation.

Bug: 32202741
Change-Id: I7acff1b7f0e153830924047349f003295648a53b
This commit is contained in:
Jakub Adamek
2016-10-17 14:53:40 +01:00
parent 4a6e246671
commit 1f36a2166b
2 changed files with 8 additions and 9 deletions

View File

@@ -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/<value of OVERLAY_SKU_DIR_PROPERTY> if exists, otherwise
// use OVERLAY_DIR if exists.
// use OVERLAY_DIR/<value of OVERLAY_SKU_DIR_PROPERTY> 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)

View File

@@ -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/<value of OVERLAY_SKU_DIR_PROPERTY> rather than in
* APKs in OVERLAY_DIR/<value of OVERLAY_SKU_DIR_PROPERTY> in addition to
* OVERLAY_DIR.
*/
static const char* OVERLAY_SKU_DIR_PROPERTY;