diff options
| author | 2017-09-25 13:21:55 -0700 | |
|---|---|---|
| committer | 2017-10-13 10:23:34 -0700 | |
| commit | 970bd8d2835b05237c4561bd6c12329e26f136b3 (patch) | |
| tree | 76004870f6957072dd24267a7a00d9ae6b237aba /libs/androidfw/AssetManager2.cpp | |
| parent | fcf52c6f5e2276c9cf2ca245757a2f0f4b1d7e4e (diff) | |
AssetManager2: Implement IDMAP support
This enables RRO (runtime resource overlays) with AssetManager2
Test: make libandroidfw_tests
Test: out/host/<platform>/nativetest64/libandroidfw_tests/libandroidfw_tests --testdata=frameworks/base/libs/androidfw/tests/data
Change-Id: Id8079104faefbfaa3f4017d8f7ee1a8968f151a2
Diffstat (limited to 'libs/androidfw/AssetManager2.cpp')
| -rw-r--r-- | libs/androidfw/AssetManager2.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/libs/androidfw/AssetManager2.cpp b/libs/androidfw/AssetManager2.cpp index f1f2e2d1417e..d4d9dcbafa5b 100644 --- a/libs/androidfw/AssetManager2.cpp +++ b/libs/androidfw/AssetManager2.cpp @@ -35,7 +35,9 @@ namespace android { -AssetManager2::AssetManager2() { memset(&configuration_, 0, sizeof(configuration_)); } +AssetManager2::AssetManager2() { + memset(&configuration_, 0, sizeof(configuration_)); +} bool AssetManager2::SetApkAssets(const std::vector<const ApkAssets*>& apk_assets, bool invalidate_caches) { @@ -55,9 +57,9 @@ void AssetManager2::BuildDynamicRefTable() { int next_package_id = 0x02; const size_t apk_assets_count = apk_assets_.size(); for (size_t i = 0; i < apk_assets_count; i++) { - const ApkAssets* apk_asset = apk_assets_[i]; - for (const std::unique_ptr<const LoadedPackage>& package : - apk_asset->GetLoadedArsc()->GetPackages()) { + const LoadedArsc* loaded_arsc = apk_assets_[i]->GetLoadedArsc(); + + for (const std::unique_ptr<const LoadedPackage>& package : loaded_arsc->GetPackages()) { // Get the package ID or assign one if a shared library. int package_id; if (package->IsDynamic()) { @@ -312,7 +314,8 @@ ApkAssetsCookie AssetManager2::FindEntry(uint32_t resid, uint16_t density_overri cumulated_flags |= current_flags; - if (best_cookie == kInvalidCookie || current_config.isBetterThan(best_config, desired_config)) { + if (best_cookie == kInvalidCookie || current_config.isBetterThan(best_config, desired_config) || + (loaded_package->IsOverlay() && current_config.compare(best_config) == 0)) { best_entry = current_entry; best_config = current_config; best_cookie = package_group.cookies_[i]; |