diff options
author | 2021-12-02 13:26:54 +0000 | |
---|---|---|
committer | 2021-12-02 19:39:09 +0000 | |
commit | a16137055fcaca3932b543f1bac2e546fa32847d (patch) | |
tree | 1c3061f1f4639c4b9ceb35377080e07f84aa1965 /tools/aapt2/dump | |
parent | 792db6a75e388704139f996ff6a556340fde39ac (diff) |
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
Diffstat (limited to 'tools/aapt2/dump')
-rw-r--r-- | tools/aapt2/dump/DumpManifest.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
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 <sdk-library> 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<Application>(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 <uses-sdk-library> elements. **/ +class UsesSdkLibrary : public ManifestExtractor::Element { + public: + UsesSdkLibrary() = default; + std::string name; + int versionMajor; + std::vector<std::string> certDigests; + + void Extract(xml::Element* element) override { + auto parent_stack = extractor()->parent_stack(); + if (parent_stack.size() > 0 && ElementCast<Application>(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 <uses-native-library> elements. **/ class UsesNativeLibrary : public ManifestExtractor::Element { public: @@ -2367,6 +2425,7 @@ T* ElementCast(ManifestExtractor::Element* element) { {"required-not-feature", std::is_base_of<RequiredNotFeature, T>::value}, {"screen", std::is_base_of<Screen, T>::value}, {"service", std::is_base_of<Service, T>::value}, + {"sdk-library", std::is_base_of<SdkLibrary, T>::value}, {"static-library", std::is_base_of<StaticLibrary, T>::value}, {"supports-gl-texture", std::is_base_of<SupportsGlTexture, T>::value}, {"supports-input", std::is_base_of<SupportsInput, T>::value}, @@ -2379,6 +2438,7 @@ T* ElementCast(ManifestExtractor::Element* element) { {"uses-permission", std::is_base_of<UsesPermission, T>::value}, {"uses-permission-sdk-23", std::is_base_of<UsesPermissionSdk23, T>::value}, {"uses-sdk", std::is_base_of<UsesSdkBadging, T>::value}, + {"uses-sdk-library", std::is_base_of<UsesSdkLibrary, T>::value}, {"uses-static-library", std::is_base_of<UsesStaticLibrary, T>::value}, }; @@ -2421,6 +2481,7 @@ std::unique_ptr<ManifestExtractor::Element> ManifestExtractor::Element::Inflate( {"required-not-feature", &CreateType<RequiredNotFeature>}, {"screen", &CreateType<Screen>}, {"service", &CreateType<Service>}, + {"sdk-library", &CreateType<SdkLibrary>}, {"static-library", &CreateType<StaticLibrary>}, {"supports-gl-texture", &CreateType<SupportsGlTexture>}, {"supports-input", &CreateType<SupportsInput>}, @@ -2433,6 +2494,7 @@ std::unique_ptr<ManifestExtractor::Element> ManifestExtractor::Element::Inflate( {"uses-permission", &CreateType<UsesPermission>}, {"uses-permission-sdk-23", &CreateType<UsesPermissionSdk23>}, {"uses-sdk", &CreateType<UsesSdkBadging>}, + {"uses-sdk-library", &CreateType<UsesSdkLibrary>}, {"uses-static-library", &CreateType<UsesStaticLibrary>}, }; |