Loading tools/aapt2/cmd/Link.h +4 −2 Original line number Diff line number Diff line Loading @@ -159,8 +159,10 @@ class LinkCommand : public Command { &options_.manifest_fixer_options.target_sdk_version_default); AddOptionalFlag("--version-code", "Version code (integer) to inject into the AndroidManifest.xml if none is\n" "present.", &options_.manifest_fixer_options.version_code_default); "present.", &options_.manifest_fixer_options.version_code_default); AddOptionalFlag("--version-code-major", "Version code major (integer) to inject into the AndroidManifest.xml if none is\n" "present.", &options_.manifest_fixer_options.version_code_major_default); AddOptionalFlag("--version-name", "Version name to inject into the AndroidManifest.xml if none is present.", &options_.manifest_fixer_options.version_name_default); Loading tools/aapt2/link/ManifestFixer.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -282,6 +282,17 @@ bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor, } } if (options_.version_code_major_default) { if (options_.replace_version) { el->RemoveAttribute(xml::kSchemaAndroid, "versionCodeMajor"); } if (el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor") == nullptr) { el->attributes.push_back( xml::Attribute{xml::kSchemaAndroid, "versionCodeMajor", options_.version_code_major_default.value()}); } } if (el->FindAttribute("", "platformBuildVersionCode") == nullptr) { auto versionCode = el->FindAttribute(xml::kSchemaAndroid, "versionCode"); if (versionCode != nullptr) { Loading tools/aapt2/link/ManifestFixer.h +4 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,10 @@ struct ManifestFixerOptions { // replace_version is set. Maybe<std::string> version_code_default; // The version code to set if 'android:versionCodeMajor' is not defined in <manifest> or if // replace_version is set. Maybe<std::string> version_code_major_default; // The version of the framework being compiled against to set for 'android:compileSdkVersion' in // the <manifest> tag. Maybe<std::string> compile_sdk_version; Loading tools/aapt2/link/ManifestFixer_test.cpp +155 −91 Original line number Diff line number Diff line Loading @@ -329,6 +329,7 @@ TEST_F(ManifestFixerTest, UseDefaultVersionNameAndCode) { ManifestFixerOptions options; options.version_name_default = std::string("Beta"); options.version_code_default = std::string("0x10000000"); options.version_code_major_default = std::string("0x20000000"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" Loading @@ -347,17 +348,23 @@ TEST_F(ManifestFixerTest, UseDefaultVersionNameAndCode) { attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x10000000")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x20000000")); } TEST_F(ManifestFixerTest, DontUseDefaultVersionNameAndCode) { ManifestFixerOptions options; options.version_name_default = std::string("Beta"); options.version_code_default = std::string("0x10000000"); options.version_code_major_default = std::string("0x20000000"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x20000000" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); Loading @@ -372,7 +379,11 @@ EXPECT_THAT(attr->value, StrEq("Alpha")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x20000000")); EXPECT_THAT(attr->value, StrEq("0x00000001")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000002")); } TEST_F(ManifestFixerTest, ReplaceVersionNameAndCode) { Loading @@ -380,11 +391,13 @@ ManifestFixerOptions options; options.replace_version = true; options.version_name_default = std::string("Beta"); options.version_code_default = std::string("0x10000000"); options.version_code_major_default = std::string("0x20000000"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x20000000" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); Loading @@ -400,6 +413,10 @@ EXPECT_THAT(attr->value, StrEq("Beta")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x10000000")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x20000000")); } TEST_F(ManifestFixerTest, ReplaceVersionName) { Loading @@ -407,10 +424,12 @@ ManifestFixerOptions options; options.replace_version = true; options.version_name_default = std::string("Beta"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x20000000" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); Loading @@ -425,7 +444,11 @@ EXPECT_THAT(attr->value, StrEq("Beta")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x20000000")); EXPECT_THAT(attr->value, StrEq("0x00000001")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000002")); } TEST_F(ManifestFixerTest, ReplaceVersionCode) { Loading @@ -436,7 +459,8 @@ options.version_code_default = std::string("0x10000000"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x20000000" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); Loading @@ -452,16 +476,22 @@ EXPECT_THAT(attr->value, StrEq("Alpha")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x10000000")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000002")); } TEST_F(ManifestFixerTest, DontReplaceVersionNameOrCode) { TEST_F(ManifestFixerTest, ReplaceVersionCodeMajor) { ManifestFixerOptions options; options.replace_version = true; options.version_code_major_default = std::string("0x20000000"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x20000000" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); Loading @@ -476,9 +506,43 @@ EXPECT_THAT(attr->value, StrEq("Alpha")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000001")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x20000000")); } TEST_F(ManifestFixerTest, DontReplaceVersionNameOrCode) { ManifestFixerOptions options; options.replace_version = true; std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); xml::Element* manifest_el = doc->root.get(); ASSERT_THAT(manifest_el, NotNull()); xml::Attribute* attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionName"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("Alpha")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000001")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000002")); } TEST_F(ManifestFixerTest, EnsureManifestAttributesAreTyped) { EXPECT_THAT(Verify("<manifest package=\"android\" coreApp=\"hello\" />"), IsNull()); EXPECT_THAT(Verify("<manifest package=\"android\" coreApp=\"1dp\" />"), IsNull()); Loading Loading
tools/aapt2/cmd/Link.h +4 −2 Original line number Diff line number Diff line Loading @@ -159,8 +159,10 @@ class LinkCommand : public Command { &options_.manifest_fixer_options.target_sdk_version_default); AddOptionalFlag("--version-code", "Version code (integer) to inject into the AndroidManifest.xml if none is\n" "present.", &options_.manifest_fixer_options.version_code_default); "present.", &options_.manifest_fixer_options.version_code_default); AddOptionalFlag("--version-code-major", "Version code major (integer) to inject into the AndroidManifest.xml if none is\n" "present.", &options_.manifest_fixer_options.version_code_major_default); AddOptionalFlag("--version-name", "Version name to inject into the AndroidManifest.xml if none is present.", &options_.manifest_fixer_options.version_name_default); Loading
tools/aapt2/link/ManifestFixer.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -282,6 +282,17 @@ bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor, } } if (options_.version_code_major_default) { if (options_.replace_version) { el->RemoveAttribute(xml::kSchemaAndroid, "versionCodeMajor"); } if (el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor") == nullptr) { el->attributes.push_back( xml::Attribute{xml::kSchemaAndroid, "versionCodeMajor", options_.version_code_major_default.value()}); } } if (el->FindAttribute("", "platformBuildVersionCode") == nullptr) { auto versionCode = el->FindAttribute(xml::kSchemaAndroid, "versionCode"); if (versionCode != nullptr) { Loading
tools/aapt2/link/ManifestFixer.h +4 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,10 @@ struct ManifestFixerOptions { // replace_version is set. Maybe<std::string> version_code_default; // The version code to set if 'android:versionCodeMajor' is not defined in <manifest> or if // replace_version is set. Maybe<std::string> version_code_major_default; // The version of the framework being compiled against to set for 'android:compileSdkVersion' in // the <manifest> tag. Maybe<std::string> compile_sdk_version; Loading
tools/aapt2/link/ManifestFixer_test.cpp +155 −91 Original line number Diff line number Diff line Loading @@ -329,6 +329,7 @@ TEST_F(ManifestFixerTest, UseDefaultVersionNameAndCode) { ManifestFixerOptions options; options.version_name_default = std::string("Beta"); options.version_code_default = std::string("0x10000000"); options.version_code_major_default = std::string("0x20000000"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" Loading @@ -347,17 +348,23 @@ TEST_F(ManifestFixerTest, UseDefaultVersionNameAndCode) { attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x10000000")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x20000000")); } TEST_F(ManifestFixerTest, DontUseDefaultVersionNameAndCode) { ManifestFixerOptions options; options.version_name_default = std::string("Beta"); options.version_code_default = std::string("0x10000000"); options.version_code_major_default = std::string("0x20000000"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x20000000" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); Loading @@ -372,7 +379,11 @@ EXPECT_THAT(attr->value, StrEq("Alpha")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x20000000")); EXPECT_THAT(attr->value, StrEq("0x00000001")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000002")); } TEST_F(ManifestFixerTest, ReplaceVersionNameAndCode) { Loading @@ -380,11 +391,13 @@ ManifestFixerOptions options; options.replace_version = true; options.version_name_default = std::string("Beta"); options.version_code_default = std::string("0x10000000"); options.version_code_major_default = std::string("0x20000000"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x20000000" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); Loading @@ -400,6 +413,10 @@ EXPECT_THAT(attr->value, StrEq("Beta")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x10000000")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x20000000")); } TEST_F(ManifestFixerTest, ReplaceVersionName) { Loading @@ -407,10 +424,12 @@ ManifestFixerOptions options; options.replace_version = true; options.version_name_default = std::string("Beta"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x20000000" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); Loading @@ -425,7 +444,11 @@ EXPECT_THAT(attr->value, StrEq("Beta")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x20000000")); EXPECT_THAT(attr->value, StrEq("0x00000001")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000002")); } TEST_F(ManifestFixerTest, ReplaceVersionCode) { Loading @@ -436,7 +459,8 @@ options.version_code_default = std::string("0x10000000"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x20000000" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); Loading @@ -452,16 +476,22 @@ EXPECT_THAT(attr->value, StrEq("Alpha")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x10000000")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000002")); } TEST_F(ManifestFixerTest, DontReplaceVersionNameOrCode) { TEST_F(ManifestFixerTest, ReplaceVersionCodeMajor) { ManifestFixerOptions options; options.replace_version = true; options.version_code_major_default = std::string("0x20000000"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x20000000" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); Loading @@ -476,9 +506,43 @@ EXPECT_THAT(attr->value, StrEq("Alpha")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000001")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x20000000")); } TEST_F(ManifestFixerTest, DontReplaceVersionNameOrCode) { ManifestFixerOptions options; options.replace_version = true; std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android" android:versionCode="0x00000001" android:versionCodeMajor="0x00000002" android:versionName="Alpha" />)EOF", options); ASSERT_THAT(doc, NotNull()); xml::Element* manifest_el = doc->root.get(); ASSERT_THAT(manifest_el, NotNull()); xml::Attribute* attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionName"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("Alpha")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000001")); attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCodeMajor"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("0x00000002")); } TEST_F(ManifestFixerTest, EnsureManifestAttributesAreTyped) { EXPECT_THAT(Verify("<manifest package=\"android\" coreApp=\"hello\" />"), IsNull()); EXPECT_THAT(Verify("<manifest package=\"android\" coreApp=\"1dp\" />"), IsNull()); Loading