aapt2: Add command to rename overlay "targetPackage" attribute
Bug: 154960712 Test: atest ManifestFixerTest Change-Id: I556fc11e271337de40c70d4ed56a0381a2f79712
This commit is contained in:
@@ -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.",
|
||||
|
||||
@@ -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);
|
||||
@@ -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"];
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user