Changed Android manifest merger build action to also resolve relative class names in manifest files for Android libraries.
RELNOTES: none
PiperOrigin-RevId: 167147373
diff --git a/src/test/java/com/google/devtools/build/android/ManifestMergerActionTest.java b/src/test/java/com/google/devtools/build/android/ManifestMergerActionTest.java
index 37314d5..9b989ad 100644
--- a/src/test/java/com/google/devtools/build/android/ManifestMergerActionTest.java
+++ b/src/test/java/com/google/devtools/build/android/ManifestMergerActionTest.java
@@ -167,7 +167,7 @@
final Path libBarManifest = AndroidDataBuilder.of(working.resolve("libBar"))
.createManifest("AndroidManifest.xml", "com.google.bar",
"<application android:name=\"${applicationId}\">",
- "<activity android:name=\"com.google.bar.activityFoo\" />",
+ "<activity android:name=\".activityFoo\" />",
"</application>")
.buildUnvalidated()
.getManifest();
@@ -192,14 +192,13 @@
assertThat(Joiner.on(" ")
.join(Files.readAllLines(libBarOutput, UTF_8))
.replaceAll("\\s+", " ").trim()).contains(
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\""
- + " package=\"com.google.libbar\">"
- + "<application android:name=\"${applicationId}\">"
- + " <activity android:name=\"com.google.bar.activityFoo\">"
- + "</activity>"
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ + " <manifest xmlns:android=\"http://schemas.android.com/apk/res/android\""
+ + " package=\"com.google.libbar\" >"
+ + " <application android:name=\"${applicationId}\" >"
+ + " <activity android:name=\"com.google.bar.activityFoo\" />"
+ " </application>"
- + "</manifest>");
+ + " </manifest>");
// binary manifest merging
args = generateArgs(
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidManifestProcessor.java b/src/tools/android/java/com/google/devtools/build/android/AndroidManifestProcessor.java
index cd9e6f8..490d245 100644
--- a/src/tools/android/java/com/google/devtools/build/android/AndroidManifestProcessor.java
+++ b/src/tools/android/java/com/google/devtools/build/android/AndroidManifestProcessor.java
@@ -129,10 +129,10 @@
Map<Path, String> mergeeManifests,
MergeType mergeType,
Map<String, String> values,
+ String customPackage,
Path output,
- Path logFile)
- throws ManifestProcessingException {
- if (mergeeManifests.isEmpty() && values.isEmpty()) {
+ Path logFile) throws ManifestProcessingException {
+ if (mergeeManifests.isEmpty() && values.isEmpty() && Strings.isNullOrEmpty(customPackage)) {
return manifest;
}
@@ -172,6 +172,11 @@
placeholders.remove(PlaceholderHandler.PACKAGE_NAME);
manifestMerger.setPlaceHolderValues(placeholders);
+ // Ignore custom package at the binary level.
+ if (!Strings.isNullOrEmpty(customPackage) && mergeType == MergeType.LIBRARY) {
+ manifestMerger.setOverride(SystemProperty.PACKAGE, customPackage);
+ }
+
try {
MergingReport mergingReport = manifestMerger.merge();
diff --git a/src/tools/android/java/com/google/devtools/build/android/ManifestMergerAction.java b/src/tools/android/java/com/google/devtools/build/android/ManifestMergerAction.java
index 43ef880..9a75d65 100644
--- a/src/tools/android/java/com/google/devtools/build/android/ManifestMergerAction.java
+++ b/src/tools/android/java/com/google/devtools/build/android/ManifestMergerAction.java
@@ -192,33 +192,27 @@
try {
Path mergedManifest;
AndroidManifestProcessor manifestProcessor = AndroidManifestProcessor.with(stdLogger);
- if (options.mergeType == MergeType.APPLICATION) {
- // Remove uses-permission tags from mergees before the merge.
- Path tmp = Files.createTempDirectory("manifest_merge_tmp");
- tmp.toFile().deleteOnExit();
- ImmutableMap.Builder<Path, String> mergeeManifests = ImmutableMap.builder();
- for (Entry<Path, String> mergeeManifest : options.mergeeManifests.entrySet()) {
- mergeeManifests.put(
- removePermissions(mergeeManifest.getKey(), tmp),
- mergeeManifest.getValue());
- }
- // Ignore custom package at the binary level.
- mergedManifest =
- manifestProcessor.mergeManifest(
- options.manifest,
- mergeeManifests.build(),
- options.mergeType,
- options.manifestValues,
- options.manifestOutput,
- options.log);
- } else {
- // Only need to stamp custom package into the library level.
- mergedManifest =
- manifestProcessor.writeManifestPackage(
- options.manifest, options.customPackage, options.manifestOutput);
+ // Remove uses-permission tags from mergees before the merge.
+ Path tmp = Files.createTempDirectory("manifest_merge_tmp");
+ tmp.toFile().deleteOnExit();
+ ImmutableMap.Builder<Path, String> mergeeManifests = ImmutableMap.builder();
+ for (Entry<Path, String> mergeeManifest : options.mergeeManifests.entrySet()) {
+ mergeeManifests.put(
+ removePermissions(mergeeManifest.getKey(), tmp),
+ mergeeManifest.getValue());
}
+ mergedManifest =
+ manifestProcessor.mergeManifest(
+ options.manifest,
+ mergeeManifests.build(),
+ options.mergeType,
+ options.manifestValues,
+ options.customPackage,
+ options.manifestOutput,
+ options.log);
+
if (!mergedManifest.equals(options.manifestOutput)) {
Files.copy(options.manifest, options.manifestOutput, StandardCopyOption.REPLACE_EXISTING);
}