From e17993597e149ddaf27e9b9604c9f10a9d1a16a9 Mon Sep 17 00:00:00 2001 From: Shane Farmer Date: Mon, 25 Sep 2017 14:19:03 -0700 Subject: AAPT2: Set compatible-screens in manifest for multi-APK If an artifact in a multi-apk set is for a scpecific set of screen densities then update the manifest to set the compatible-screens element to match. Test: ran unit tests Test: manually ran optimize command Change-Id: I07e90850ab2f4647a8623acbeaccbebbe81c3a6a --- tools/aapt2/optimize/MultiApkGenerator.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'tools/aapt2/optimize') diff --git a/tools/aapt2/optimize/MultiApkGenerator.cpp b/tools/aapt2/optimize/MultiApkGenerator.cpp index fb150e204167..8e4b82c6c261 100644 --- a/tools/aapt2/optimize/MultiApkGenerator.cpp +++ b/tools/aapt2/optimize/MultiApkGenerator.cpp @@ -324,7 +324,30 @@ bool MultiApkGenerator::UpdateManifest(const Artifact& artifact, } } - // TODO(safarmer): Check if we changed the supported screens and update the manifest. + if (artifact.screen_density_group) { + auto densities = config.screen_density_groups.find(artifact.screen_density_group.value()); + CHECK(densities != config.screen_density_groups.end()) << "Missing density group"; + + xml::Element* screens_el = manifest_el->FindChild({}, "compatible-screens"); + if (!screens_el) { + // create a new element. + std::unique_ptr new_screens_el = util::make_unique(); + new_screens_el->name = "compatible-screens"; + screens_el = new_screens_el.get(); + manifest_el->InsertChild(0, std::move(new_screens_el)); + } else { + // clear out the old element. + screens_el->GetChildElements().clear(); + } + + for (const auto& density : densities->second) { + std::unique_ptr screen_el = util::make_unique(); + screen_el->name = "screen"; + const char* density_str = density.toString().string(); + screen_el->attributes.push_back(xml::Attribute{kSchemaAndroid, "screenDensity", density_str}); + screens_el->AppendChild(std::move(screen_el)); + } + } return true; } -- cgit v1.2.3-59-g8ed1b