aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar jingwen <jingwen@google.com>2017-09-22 11:57:16 -0400
committerGravatar John Cater <jcater@google.com>2017-09-25 09:37:26 -0400
commit0d00f700c71718043942d211ee73dcefe19d0854 (patch)
tree012e32120baf4b75bfd3abf974817e9670cbecbc /src/main
parente8d3c223185a8e1c0b659a5c70d2987460460d06 (diff)
Create AndroidManifest.xml symlink if user provides a manifest not named
"AndroidManifest.xml". aapt requires the manifest to be named "AndroidManifest.xml" (unknown commit) This allows users to provide manifests with custom names. RELNOTES: Android rules no longer restrict the manifest file to be named "AndroidManifest.xml". PiperOrigin-RevId: 169695062
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java2
2 files changed, 21 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java
index 84ed3a141f..ac6a6bc7f3 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java
@@ -18,11 +18,13 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
+import com.google.devtools.build.lib.analysis.actions.SymlinkAction;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.android.AndroidCommon;
import com.google.devtools.build.lib.rules.android.AndroidConfiguration;
import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider;
+import com.google.devtools.build.lib.rules.android.AndroidRuleClasses;
import com.google.devtools.build.lib.rules.android.AndroidSemantics;
import com.google.devtools.build.lib.rules.android.ApplicationManifest;
import com.google.devtools.build.lib.rules.android.ResourceApk;
@@ -46,14 +48,25 @@ public class BazelAndroidSemantics implements AndroidSemantics {
AndroidIdeInfoProvider.Builder ideInfoProviderBuilder) {}
@Override
- public ApplicationManifest getManifestForRule(RuleContext ruleContext) throws RuleErrorException {
+ public ApplicationManifest getManifestForRule(RuleContext ruleContext)
+ throws RuleErrorException, InterruptedException {
ApplicationManifest result = ApplicationManifest.fromRule(ruleContext);
- if (!result.getManifest().getExecPath().getBaseName().equals("AndroidManifest.xml")) {
- ruleContext.attributeError("manifest", "The manifest must be called 'AndroidManifest.xml'");
- throw new RuleErrorException();
+ Artifact manifest = result.getManifest();
+ if (manifest.getFilename().equals("AndroidManifest.xml")) {
+ return result;
+ } else {
+ /**
+ * If the manifest file is not named AndroidManifest.xml, we create a symlink named
+ * AndroidManifest.xml to it. aapt requires the manifest to be named as such.
+ */
+ Artifact manifestSymlink =
+ ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_SYMLINKED_MANIFEST);
+ SymlinkAction symlinkAction =
+ new SymlinkAction(
+ ruleContext.getActionOwner(), manifest, manifestSymlink, "Renaming Android manifest");
+ ruleContext.registerAction(symlinkAction);
+ return ApplicationManifest.fromExplicitManifest(ruleContext, manifestSymlink);
}
-
- return result;
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index 763a134cba..93cf9eab34 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -137,6 +137,8 @@ public final class AndroidRuleClasses {
fromTemplates("%{name}_symbols/merged.bin");
public static final SafeImplicitOutputsFunction ANDROID_COMPILED_SYMBOLS =
fromTemplates("%{name}_symbols/symbols.zip");
+ public static final SafeImplicitOutputsFunction ANDROID_SYMLINKED_MANIFEST =
+ fromTemplates("%{name}_symlinked_manifest/AndroidManifest.xml");
public static final ImplicitOutputsFunction ANDROID_PROCESSED_MANIFEST =
fromTemplates("%{name}_processed_manifest/AndroidManifest.xml");
public static final SafeImplicitOutputsFunction MOBILE_INSTALL_STUB_APPLICATION_MANIFEST =