From 05fd929d3e214e08765cd1c96b4a043c99fe47db Mon Sep 17 00:00:00 2001 From: Iurii Makhno Date: Wed, 24 Aug 2022 18:56:12 +0000 Subject: [PATCH] Use the latest 'uses-sdk' tag to detect target SDK version. At the moment aapt2 dumps information from the latest element but uses all of them to detect target SDK which affects implied permissions. Use only the latest one for detecting targetSdk as well. Bug: b/243145989 Test: Dump_test Change-Id: I70f828f1845ab070fa84c5297af12df24e7068dc --- tools/aapt2/cmd/Dump_test.cpp | 16 ++++++++++++ tools/aapt2/dump/DumpManifest.cpp | 11 ++++++++- .../DumpTest/multiple_uses_sdk.apk | Bin 0 -> 34459 bytes .../DumpTest/multiple_uses_sdk_expected.txt | 23 ++++++++++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 tools/aapt2/integration-tests/DumpTest/multiple_uses_sdk.apk create mode 100644 tools/aapt2/integration-tests/DumpTest/multiple_uses_sdk_expected.txt diff --git a/tools/aapt2/cmd/Dump_test.cpp b/tools/aapt2/cmd/Dump_test.cpp index 03da364f4f3e7..b1c69cd9a7b72 100644 --- a/tools/aapt2/cmd/Dump_test.cpp +++ b/tools/aapt2/cmd/Dump_test.cpp @@ -59,6 +59,22 @@ TEST_F(DumpTest, DumpBadging) { ASSERT_EQ(output, expected); } +TEST_F(DumpTest, DumpBadgingMultipleUsesSdkTakesLatest) { + auto apk_path = file::BuildPath({android::base::GetExecutableDirectory(), "integration-tests", + "DumpTest", "multiple_uses_sdk.apk"}); + auto loaded_apk = LoadedApk::LoadApkFromPath(apk_path, &noop_diag); + + std::string output; + DumpBadgingToString(loaded_apk.get(), &output); + + std::string expected; + auto expected_path = + file::BuildPath({android::base::GetExecutableDirectory(), "integration-tests", "DumpTest", + "multiple_uses_sdk_expected.txt"}); + ::android::base::ReadFileToString(expected_path, &expected); + ASSERT_EQ(output, expected); +} + TEST_F(DumpTest, DumpBadgingAllComponents) { auto apk_path = file::BuildPath( {android::base::GetExecutableDirectory(), "integration-tests", "DumpTest", "components.apk"}); diff --git a/tools/aapt2/dump/DumpManifest.cpp b/tools/aapt2/dump/DumpManifest.cpp index b3165d320e9b7..f0b0e867b35b8 100644 --- a/tools/aapt2/dump/DumpManifest.cpp +++ b/tools/aapt2/dump/DumpManifest.cpp @@ -448,7 +448,12 @@ class ManifestExtractor { /** Recursively visit the xml element tree and return a processed badging element tree. */ std::unique_ptr Visit(xml::Element* element); - /** Raises the target sdk value if the min target is greater than the current target. */ + /** Resets target SDK to 0. */ + void ResetTargetSdk() { + target_sdk_ = 0; + } + + /** Raises the target sdk value if the min target is greater than the current target. */ void RaiseTargetSdk(int32_t min_target) { if (min_target > target_sdk_) { target_sdk_ = min_target; @@ -799,6 +804,10 @@ class UsesSdkBadging : public ManifestExtractor::Element { target_sdk = GetAttributeInteger(FindAttribute(element, TARGET_SDK_VERSION_ATTR)); target_sdk_name = GetAttributeString(FindAttribute(element, TARGET_SDK_VERSION_ATTR)); + // Resets target SDK first. This is required if APK contains multiple elements, + // we only need to take the latest values. + extractor()->ResetTargetSdk(); + // Detect the target sdk of the element if ((min_sdk_name && *min_sdk_name == "Donut") || (target_sdk_name && *target_sdk_name == "Donut")) { diff --git a/tools/aapt2/integration-tests/DumpTest/multiple_uses_sdk.apk b/tools/aapt2/integration-tests/DumpTest/multiple_uses_sdk.apk new file mode 100644 index 0000000000000000000000000000000000000000..7b269a5b8e5a949f3748657952a0c98ea189bf2b GIT binary patch literal 34459 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