diff options
author | Adam Lesinski <adamlesinski@google.com> | 2013-10-18 13:45:19 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-10-18 13:45:19 -0700 |
commit | 91b47365f68e29467912ddfa39dea30e661aff68 (patch) | |
tree | 0bf7b5f44ec1e78850bcd0911e627a9e80e2a9a8 /tools | |
parent | 1fb5ea38533b0a163194441f4f28cd64a5835446 (diff) | |
parent | 16e8c4f7db87d743410751410c7f761350792fe2 (diff) | |
download | frameworks_base-91b47365f68e29467912ddfa39dea30e661aff68.zip frameworks_base-91b47365f68e29467912ddfa39dea30e661aff68.tar.gz frameworks_base-91b47365f68e29467912ddfa39dea30e661aff68.tar.bz2 |
am 16e8c4f7: am 7d292145: Merge "Prune unneeded density resources from APK" into klp-dev
* commit '16e8c4f7db87d743410751410c7f761350792fe2':
Prune unneeded density resources from APK
Diffstat (limited to 'tools')
-rw-r--r-- | tools/aapt/AaptAssets.cpp | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/tools/aapt/AaptAssets.cpp b/tools/aapt/AaptAssets.cpp index 3797b49..d8e113a 100644 --- a/tools/aapt/AaptAssets.cpp +++ b/tools/aapt/AaptAssets.cpp @@ -2487,6 +2487,15 @@ status_t AaptAssets::filter(Bundle* bundle) continue; } + // Get the preferred density if there is one. We do not match exactly for density. + // If our preferred density is hdpi but we only have mdpi and xhdpi resources, we + // pick xhdpi. + uint32_t preferredDensity = 0; + const SortedVector<uint32_t>* preferredConfigs = prefFilter.configsForAxis(AXIS_DENSITY); + if (preferredConfigs != NULL && preferredConfigs->size() > 0) { + preferredDensity = (*preferredConfigs)[0]; + } + // Now deal with preferred configurations. for (int axis=AXIS_START; axis<=AXIS_END; axis++) { for (size_t k=0; k<grp->getFiles().size(); k++) { @@ -2512,12 +2521,30 @@ status_t AaptAssets::filter(Bundle* bundle) // This is a resource we would prefer not to have. Check // to see if have a similar variation that we would like // to have and, if so, we can drop it. + + uint32_t bestDensity = config.density; + for (size_t m=0; m<grp->getFiles().size(); m++) { if (m == k) continue; sp<AaptFile> mfile = grp->getFiles().valueAt(m); const ResTable_config& mconfig(mfile->getGroupEntry().toParams()); if (AaptGroupEntry::configSameExcept(config, mconfig, axis)) { - if (prefFilter.match(axis, mconfig)) { + if (axis == AXIS_DENSITY && preferredDensity > 0) { + // See if there is a better density resource + if (mconfig.density < bestDensity && + mconfig.density > preferredDensity && + bestDensity > preferredDensity) { + // This density is between our best density and + // the preferred density, therefore it is better. + bestDensity = mconfig.density; + } else if (mconfig.density > bestDensity && + bestDensity < preferredDensity) { + // This density is better than our best density and + // our best density was smaller than our preferred + // density, so it is better. + bestDensity = mconfig.density; + } + } else if (prefFilter.match(axis, mconfig)) { if (bundle->getVerbose()) { printf("Pruning unneeded resource: %s\n", file->getPrintableSource().string()); @@ -2528,6 +2555,16 @@ status_t AaptAssets::filter(Bundle* bundle) } } } + + if (axis == AXIS_DENSITY && preferredDensity > 0 && + bestDensity != config.density) { + if (bundle->getVerbose()) { + printf("Pruning unneeded resource: %s\n", + file->getPrintableSource().string()); + } + grp->removeFile(k); + k--; + } } } } |