summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ryan Mitchell <rtmitchell@google.com> 2018-05-11 15:18:56 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-05-11 15:18:56 +0000
commit91d2f87d0eef6e5445b1152f24ec708764e703d4 (patch)
tree6df66a3e890519a9109e1c1306ed284fa6161de5
parentf36144f575098d2ff1be8343827fb92d10b9db9b (diff)
parent7cb82a86beda55a178d76dc8dd90d0b01a4b9c91 (diff)
Merge "AAPT2: Insert platformBuild information" into pi-dev
-rw-r--r--tools/aapt2/link/ManifestFixer.cpp17
-rw-r--r--tools/aapt2/link/ManifestFixer_test.cpp52
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"(