Loading tools/aapt2/cmd/Link.h +4 −0 Original line number Diff line number Diff line Loading @@ -263,6 +263,10 @@ class LinkCommand : public Command { "Changes the name of the target package for instrumentation. Most useful\n" "when used in conjunction with --rename-manifest-package.", &options_.manifest_fixer_options.rename_instrumentation_target_package); AddOptionalFlag("--rename-overlay-target-package", "Changes the name of the target package for overlay. Most useful\n" "when used in conjunction with --rename-manifest-package.", &options_.manifest_fixer_options.rename_overlay_target_package); AddOptionalFlagList("-0", "File suffix not to compress.", &options_.extensions_to_not_compress); AddOptionalSwitch("--no-compress", "Do not compress any resources.", Loading tools/aapt2/link/ManifestFixer.cpp +21 −1 Original line number Diff line number Diff line Loading @@ -263,6 +263,16 @@ bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor, } } if (options_.rename_overlay_target_package) { if (!util::IsJavaPackageName(options_.rename_overlay_target_package.value())) { diag->Error(DiagMessage() << "invalid overlay target package override '" << options_.rename_overlay_target_package.value() << "'"); return false; } } // Common <intent-filter> actions. xml::XmlNodeAction intent_filter_action; intent_filter_action["action"].Action(RequiredNameIsNotEmpty); Loading Loading @@ -373,7 +383,17 @@ bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor, manifest_action["attribution"]; manifest_action["attribution"]["inherit-from"]; manifest_action["original-package"]; manifest_action["overlay"]; manifest_action["overlay"].Action([&](xml::Element* el) -> bool { if (!options_.rename_overlay_target_package) { return true; } if (xml::Attribute* attr = el->FindAttribute(xml::kSchemaAndroid, "targetPackage")) { attr->value = options_.rename_overlay_target_package.value(); } return true; }); manifest_action["protected-broadcast"]; manifest_action["adopt-permissions"]; manifest_action["uses-permission"]; Loading tools/aapt2/link/ManifestFixer.h +4 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,10 @@ struct ManifestFixerOptions { // <instrumentation>. Maybe<std::string> rename_instrumentation_target_package; // The Android package to use instead of the one defined in 'android:targetPackage' in // <overlay>. Maybe<std::string> rename_overlay_target_package; // The version name to set if 'android:versionName' is not defined in <manifest> or if // replace_version is set. Maybe<std::string> version_name_default; Loading tools/aapt2/link/ManifestFixer_test.cpp +26 −0 Original line number Diff line number Diff line Loading @@ -325,6 +325,32 @@ TEST_F(ManifestFixerTest, EXPECT_THAT(attr->value, StrEq("com.android")); } TEST_F(ManifestFixerTest, RenameManifestOverlayPackageAndFullyQualifyTarget) { ManifestFixerOptions options; options.rename_overlay_target_package = std::string("com.android"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android"> <overlay android:targetName="Customization" android:targetPackage="android" /> </manifest>)EOF", options); ASSERT_THAT(doc, NotNull()); xml::Element* manifest_el = doc->root.get(); ASSERT_THAT(manifest_el, NotNull()); xml::Element* overlay_el = manifest_el->FindChild({}, "overlay"); ASSERT_THAT(overlay_el, NotNull()); xml::Attribute* attr = overlay_el->FindAttribute(xml::kSchemaAndroid, "targetPackage"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("com.android")); } TEST_F(ManifestFixerTest, UseDefaultVersionNameAndCode) { ManifestFixerOptions options; options.version_name_default = std::string("Beta"); Loading Loading
tools/aapt2/cmd/Link.h +4 −0 Original line number Diff line number Diff line Loading @@ -263,6 +263,10 @@ class LinkCommand : public Command { "Changes the name of the target package for instrumentation. Most useful\n" "when used in conjunction with --rename-manifest-package.", &options_.manifest_fixer_options.rename_instrumentation_target_package); AddOptionalFlag("--rename-overlay-target-package", "Changes the name of the target package for overlay. Most useful\n" "when used in conjunction with --rename-manifest-package.", &options_.manifest_fixer_options.rename_overlay_target_package); AddOptionalFlagList("-0", "File suffix not to compress.", &options_.extensions_to_not_compress); AddOptionalSwitch("--no-compress", "Do not compress any resources.", Loading
tools/aapt2/link/ManifestFixer.cpp +21 −1 Original line number Diff line number Diff line Loading @@ -263,6 +263,16 @@ bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor, } } if (options_.rename_overlay_target_package) { if (!util::IsJavaPackageName(options_.rename_overlay_target_package.value())) { diag->Error(DiagMessage() << "invalid overlay target package override '" << options_.rename_overlay_target_package.value() << "'"); return false; } } // Common <intent-filter> actions. xml::XmlNodeAction intent_filter_action; intent_filter_action["action"].Action(RequiredNameIsNotEmpty); Loading Loading @@ -373,7 +383,17 @@ bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor, manifest_action["attribution"]; manifest_action["attribution"]["inherit-from"]; manifest_action["original-package"]; manifest_action["overlay"]; manifest_action["overlay"].Action([&](xml::Element* el) -> bool { if (!options_.rename_overlay_target_package) { return true; } if (xml::Attribute* attr = el->FindAttribute(xml::kSchemaAndroid, "targetPackage")) { attr->value = options_.rename_overlay_target_package.value(); } return true; }); manifest_action["protected-broadcast"]; manifest_action["adopt-permissions"]; manifest_action["uses-permission"]; Loading
tools/aapt2/link/ManifestFixer.h +4 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,10 @@ struct ManifestFixerOptions { // <instrumentation>. Maybe<std::string> rename_instrumentation_target_package; // The Android package to use instead of the one defined in 'android:targetPackage' in // <overlay>. Maybe<std::string> rename_overlay_target_package; // The version name to set if 'android:versionName' is not defined in <manifest> or if // replace_version is set. Maybe<std::string> version_name_default; Loading
tools/aapt2/link/ManifestFixer_test.cpp +26 −0 Original line number Diff line number Diff line Loading @@ -325,6 +325,32 @@ TEST_F(ManifestFixerTest, EXPECT_THAT(attr->value, StrEq("com.android")); } TEST_F(ManifestFixerTest, RenameManifestOverlayPackageAndFullyQualifyTarget) { ManifestFixerOptions options; options.rename_overlay_target_package = std::string("com.android"); std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF( <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android"> <overlay android:targetName="Customization" android:targetPackage="android" /> </manifest>)EOF", options); ASSERT_THAT(doc, NotNull()); xml::Element* manifest_el = doc->root.get(); ASSERT_THAT(manifest_el, NotNull()); xml::Element* overlay_el = manifest_el->FindChild({}, "overlay"); ASSERT_THAT(overlay_el, NotNull()); xml::Attribute* attr = overlay_el->FindAttribute(xml::kSchemaAndroid, "targetPackage"); ASSERT_THAT(attr, NotNull()); EXPECT_THAT(attr->value, StrEq("com.android")); } TEST_F(ManifestFixerTest, UseDefaultVersionNameAndCode) { ManifestFixerOptions options; options.version_name_default = std::string("Beta"); Loading