aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-03-22 11:15:43 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-22 11:16:59 -0700
commit4f654dabba9af6e3966c3dcad986094385058562 (patch)
treed8297bcc77b1ed11c71224fba67a79ba7bfb2403 /src/tools/android/java/com
parent39cef6d6a4a9e3ae80b11a9ccc0f35325852777c (diff)
Make ManifestMergerAction able to not take a primary manifest
This is the only difference in action implementation required for the new Skylark Android Data API design. Even if rules have resources or assets, after this API is adopted, they will no longer have to specify a primary manifest. Instead, a dummy manifest will be generated (either to merge with dependency manifests, or for use by IDEs if there are no dependency manifests). Support this in the ManifestMergerAction by supporting not having a --manifest value passed. RELNOTES: None PiperOrigin-RevId: 190095623
Diffstat (limited to 'src/tools/android/java/com')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ManifestMergerAction.java18
1 files changed, 15 insertions, 3 deletions
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 3fb09d2dff..a0fb3e36da 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
@@ -75,7 +75,9 @@ public class ManifestMergerAction {
category = "input",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
- help = "Path of primary manifest."
+ help =
+ "Path of primary manifest. If not passed, a dummy manifest will be generated and used as"
+ + " the primary."
)
public Path manifest;
@@ -203,9 +205,16 @@ public class ManifestMergerAction {
removePermissions(mergeeManifest.getKey(), tmp), mergeeManifest.getValue());
}
+ Path manifest = options.manifest;
+ if (manifest == null) {
+ // No primary manifest was passed. Generate a dummy primary.
+ manifest = tmp.resolve("dummy_AndroidManifest.xml");
+ AndroidResourceProcessor.writeDummyManifestForAapt(manifest, options.customPackage);
+ }
+
mergedManifest =
manifestProcessor.mergeManifest(
- options.manifest,
+ manifest,
mergeeManifests.build(),
options.mergeType,
options.manifestValues,
@@ -214,7 +223,10 @@ public class ManifestMergerAction {
options.log);
if (!mergedManifest.equals(options.manifestOutput)) {
- Files.copy(options.manifest, options.manifestOutput, StandardCopyOption.REPLACE_EXISTING);
+ // manifestProcess.mergeManifest returns the merged manifest, or, if merging was a no-op,
+ // the original primary manifest. In the latter case, explicitly copy that primary manifest
+ // to the expected location of the output.
+ Files.copy(manifest, options.manifestOutput, StandardCopyOption.REPLACE_EXISTING);
}
} catch (AndroidManifestProcessor.ManifestProcessingException e) {
System.exit(1);