diff options
author | 2018-05-11 08:41:00 -0700 | |
---|---|---|
committer | 2018-05-11 08:41:00 -0700 | |
commit | 3a20be789f8055356973e61d19e69cf9982429fe (patch) | |
tree | 4a5ab891e6616636dede6ab93e27d8e269077882 | |
parent | b9a57f05a09a061917b86100571902de07f8409d (diff) | |
parent | 78e0e6aa2ee266b41b04482ac85124db5a4c4358 (diff) |
Merge "AAPT2: Insert platformBuild information" into pi-dev am: 91d2f87d0e
am: 78e0e6aa2e
Change-Id: I6fb1af5b521c5a887ee494c745b83592e48228de
-rw-r--r-- | tools/aapt2/link/ManifestFixer.cpp | 17 | ||||
-rw-r--r-- | tools/aapt2/link/ManifestFixer_test.cpp | 52 |
2 files changed, 69 insertions, 0 deletions
diff --git a/tools/aapt2/link/ManifestFixer.cpp b/tools/aapt2/link/ManifestFixer.cpp index 165702ca42cd..bfff1487d4be 100644 --- a/tools/aapt2/link/ManifestFixer.cpp +++ b/tools/aapt2/link/ManifestFixer.cpp @@ -275,6 +275,23 @@ bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor, options_.version_code_default.value()}); } } + + if (el->FindAttribute("", "platformBuildVersionCode") == nullptr) { + auto versionCode = el->FindAttribute(xml::kSchemaAndroid, "versionCode"); + if (versionCode != nullptr) { + el->attributes.push_back(xml::Attribute{"", "platformBuildVersionCode", + versionCode->value}); + } + } + + if (el->FindAttribute("", "platformBuildVersionName") == nullptr) { + auto versionName = el->FindAttribute(xml::kSchemaAndroid, "versionName"); + if (versionName != nullptr) { + el->attributes.push_back(xml::Attribute{"", "platformBuildVersionName", + versionName->value}); + } + } + return true; }); diff --git a/tools/aapt2/link/ManifestFixer_test.cpp b/tools/aapt2/link/ManifestFixer_test.cpp index 8db937439c55..5f406e81f65d 100644 --- a/tools/aapt2/link/ManifestFixer_test.cpp +++ b/tools/aapt2/link/ManifestFixer_test.cpp @@ -556,6 +556,58 @@ TEST_F(ManifestFixerTest, UnexpectedElementsInManifest) { ASSERT_THAT(manifest, IsNull()); } +TEST_F(ManifestFixerTest, InsertPlatformBuildVersions) { + // Test for insertion when versionCode and versionName are included in the manifest + { + std::string input = R"( + <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" + android:versionCode="27" android:versionName="O"/>)"; + std::unique_ptr<xml::XmlResource> manifest = Verify(input); + ASSERT_THAT(manifest, NotNull()); + + xml::Attribute* attr = manifest->root->FindAttribute("", "platformBuildVersionCode"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("27")); + attr = manifest->root->FindAttribute("", "platformBuildVersionName"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("O")); + } + + // Test for insertion when versionCode and versionName defaults are specified + { + std::string input = R"( + <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android"/>)"; + ManifestFixerOptions options; + options.version_code_default = {"27"}; + options.version_name_default = {"O"}; + std::unique_ptr<xml::XmlResource> manifest = VerifyWithOptions(input, options); + ASSERT_THAT(manifest, NotNull()); + + xml::Attribute* attr = manifest->root->FindAttribute("", "platformBuildVersionCode"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("27")); + attr = manifest->root->FindAttribute("", "platformBuildVersionName"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("O")); + } + + // Test that the platform build version attributes are not changed if they are currently present + { + std::string input = R"( + <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" + android:versionCode="28" android:versionName="P" + platformBuildVersionCode="27" platformBuildVersionName="O"/>)"; + std::unique_ptr<xml::XmlResource> manifest = Verify(input); + ASSERT_THAT(manifest, NotNull()); + + xml::Attribute* attr = manifest->root->FindAttribute("", "platformBuildVersionCode"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("27")); + attr = manifest->root->FindAttribute("", "platformBuildVersionName"); + ASSERT_THAT(attr, NotNull()); + EXPECT_THAT(attr->value, StrEq("O")); + } +} TEST_F(ManifestFixerTest, UsesLibraryMustHaveNonEmptyName) { std::string input = R"( |