From a16137055fcaca3932b543f1bac2e546fa32847d Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Thu, 2 Dec 2021 13:26:54 +0000 Subject: Revert "Revert "SDK libraries."" This reverts commit a22b7e05d4ee2dddb6e89726102b10f0d8257381. Reason for revert: This is a roll forwards with the fix applied. Fixes: 208710019 Change-Id: Id4e9029ebe5864ddcc5583ce525e8e70da79f82c --- tools/aapt2/dump/DumpManifest.cpp | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) (limited to 'tools/aapt2/dump') diff --git a/tools/aapt2/dump/DumpManifest.cpp b/tools/aapt2/dump/DumpManifest.cpp index 40bbb36337bc..9828b97982ed 100644 --- a/tools/aapt2/dump/DumpManifest.cpp +++ b/tools/aapt2/dump/DumpManifest.cpp @@ -1461,6 +1461,64 @@ class UsesStaticLibrary : public ManifestExtractor::Element { } }; +/** Represents elements. **/ +class SdkLibrary : public ManifestExtractor::Element { + public: + SdkLibrary() = default; + std::string name; + int versionMajor; + + void Extract(xml::Element* element) override { + auto parent_stack = extractor()->parent_stack(); + if (parent_stack.size() > 0 && ElementCast(parent_stack[0])) { + name = GetAttributeStringDefault(FindAttribute(element, NAME_ATTR), ""); + versionMajor = GetAttributeIntegerDefault(FindAttribute(element, VERSION_MAJOR_ATTR), 0); + } + } + + void Print(text::Printer* printer) override { + printer->Print( + StringPrintf("sdk-library: name='%s' versionMajor='%d'\n", name.data(), versionMajor)); + } +}; + +/** Represents elements. **/ +class UsesSdkLibrary : public ManifestExtractor::Element { + public: + UsesSdkLibrary() = default; + std::string name; + int versionMajor; + std::vector certDigests; + + void Extract(xml::Element* element) override { + auto parent_stack = extractor()->parent_stack(); + if (parent_stack.size() > 0 && ElementCast(parent_stack[0])) { + name = GetAttributeStringDefault(FindAttribute(element, NAME_ATTR), ""); + versionMajor = GetAttributeIntegerDefault(FindAttribute(element, VERSION_MAJOR_ATTR), 0); + AddCertDigest(element); + } + } + + void AddCertDigest(xml::Element* element) { + std::string digest = GetAttributeStringDefault(FindAttribute(element, CERT_DIGEST_ATTR), ""); + // We allow ":" delimiters in the SHA declaration as this is the format + // emitted by the certtool making it easy for developers to copy/paste. + digest.erase(std::remove(digest.begin(), digest.end(), ':'), digest.end()); + if (!digest.empty()) { + certDigests.push_back(digest); + } + } + + void Print(text::Printer* printer) override { + printer->Print( + StringPrintf("uses-sdk-library: name='%s' versionMajor='%d'", name.data(), versionMajor)); + for (size_t i = 0; i < certDigests.size(); i++) { + printer->Print(StringPrintf(" certDigest='%s'", certDigests[i].data())); + } + printer->Print("\n"); + } +}; + /** Represents elements. **/ class UsesNativeLibrary : public ManifestExtractor::Element { public: @@ -2367,6 +2425,7 @@ T* ElementCast(ManifestExtractor::Element* element) { {"required-not-feature", std::is_base_of::value}, {"screen", std::is_base_of::value}, {"service", std::is_base_of::value}, + {"sdk-library", std::is_base_of::value}, {"static-library", std::is_base_of::value}, {"supports-gl-texture", std::is_base_of::value}, {"supports-input", std::is_base_of::value}, @@ -2379,6 +2438,7 @@ T* ElementCast(ManifestExtractor::Element* element) { {"uses-permission", std::is_base_of::value}, {"uses-permission-sdk-23", std::is_base_of::value}, {"uses-sdk", std::is_base_of::value}, + {"uses-sdk-library", std::is_base_of::value}, {"uses-static-library", std::is_base_of::value}, }; @@ -2421,6 +2481,7 @@ std::unique_ptr ManifestExtractor::Element::Inflate( {"required-not-feature", &CreateType}, {"screen", &CreateType}, {"service", &CreateType}, + {"sdk-library", &CreateType}, {"static-library", &CreateType}, {"supports-gl-texture", &CreateType}, {"supports-input", &CreateType}, @@ -2433,6 +2494,7 @@ std::unique_ptr ManifestExtractor::Element::Inflate( {"uses-permission", &CreateType}, {"uses-permission-sdk-23", &CreateType}, {"uses-sdk", &CreateType}, + {"uses-sdk-library", &CreateType}, {"uses-static-library", &CreateType}, }; -- cgit v1.2.3-59-g8ed1b