aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-01-25 14:16:50 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-01-25 16:52:18 +0000
commit44f145875cf7c2ab76d92139ac7b14a256eae532 (patch)
tree3253881906176065a6ac91699374cbfb8a718689 /src/main/java/com/google/devtools/build/lib
parent9e16f0ad1016a28d04c498b60d4845169c2ce497 (diff)
Export the AndroidManifest.xml from the resource processing. This is an initial step toward changing the manifest merge to use the Gradle merger, as well as ensuring the custom library package is reflected in the manifest.
-- MOS_MIGRATED_REVID=112943820
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java16
5 files changed, 45 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index 2979e4e0db..692b73a774 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -208,7 +208,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ruleContext.attributes().get("application_id", Type.STRING),
getExpandedMakeVarsForAttr(ruleContext, "version_code"),
getExpandedMakeVarsForAttr(ruleContext, "version_name"),
- false, ProguardHelper.getProguardConfigArtifact(ruleContext, ""));
+ false, /* incremental */
+ ProguardHelper.getProguardConfigArtifact(ruleContext, ""),
+ null /* manifestOut */);
if (ruleContext.hasErrors()) {
return null;
}
@@ -225,7 +227,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ruleContext.attributes().get("application_id", Type.STRING),
getExpandedMakeVarsForAttr(ruleContext, "version_code"),
getExpandedMakeVarsForAttr(ruleContext, "version_name"),
- true, ProguardHelper.getProguardConfigArtifact(ruleContext, "incremental"));
+ true, /* incremental */
+ ProguardHelper.getProguardConfigArtifact(ruleContext, "incremental"),
+ null /* manifestOut */);
if (ruleContext.hasErrors()) {
return null;
}
@@ -242,7 +246,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ruleContext.attributes().get("application_id", Type.STRING),
getExpandedMakeVarsForAttr(ruleContext, "version_code"),
getExpandedMakeVarsForAttr(ruleContext, "version_name"),
- true, ProguardHelper.getProguardConfigArtifact(ruleContext, "incremental_split"));
+ true,
+ ProguardHelper.getProguardConfigArtifact(ruleContext, "incremental_split"),
+ null /* manifestOut */);
if (ruleContext.hasErrors()) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
index 9cb6d2d73c..b598babc28 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
@@ -92,7 +92,9 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
null /* versionCode */,
null /* versionName */,
false,
- null /* proguardCfgOut */);
+ null /* proguardCfgOut */,
+ ruleContext.getImplicitOutputArtifact(
+ AndroidRuleClasses.ANDROID_LIBRARY_MANIFEST));
if (ruleContext.hasErrors()) {
return null;
}
@@ -151,6 +153,9 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
primaryResources = new AndroidResourcesProcessorBuilder(ruleContext)
.setApkOut(apk)
.setRTxtOut(resourceContainer.getRTxt())
+ .setManifestOut(
+ ruleContext.getImplicitOutputArtifact(
+ AndroidRuleClasses.ANDROID_LIBRARY_MANIFEST))
.setSourceJarOut(resourceContainer.getJavaSourceJar())
.setJavaPackage(resourceContainer.getJavaPackage())
.withPrimary(resourceContainer)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
index 915c8eb7be..ee9970874f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
@@ -75,6 +75,8 @@ public class AndroidResourcesProcessorBuilder {
private String versionName;
private Artifact symbolsTxt;
+ private Artifact manifestOut;
+
/**
* @param ruleContext The RuleContext that was used to create the SpawnAction.Builder.
*/
@@ -149,6 +151,11 @@ public class AndroidResourcesProcessorBuilder {
return this;
}
+ public AndroidResourcesProcessorBuilder setManifestOut(Artifact manifestOut) {
+ this.manifestOut = manifestOut;
+ return this;
+ }
+
private static class ResourceContainerToArg implements Function<ResourceContainer, String> {
private boolean includeSymbols;
@@ -278,6 +285,12 @@ public class AndroidResourcesProcessorBuilder {
builder.addExecPath("--proguardOutput", proguardOut);
outs.add(proguardOut);
}
+
+ if (manifestOut != null) {
+ builder.addExecPath("--manifestOutput", manifestOut);
+ outs.add(manifestOut);
+ }
+
if (apkOut != null) {
builder.addExecPath("--packagePath", apkOut);
outs.add(apkOut);
@@ -339,7 +352,8 @@ public class AndroidResourcesProcessorBuilder {
// for this resource processing action (in case of just creating an R.txt or
// proguard merging), reuse the primary resource from the dependencies.
apkOut != null ? apkOut : primary.getApk(),
- primary.getManifest(), sourceJarOut,
+ manifestOut != null ? manifestOut : primary.getManifest(),
+ sourceJarOut,
primary.getArtifacts(ResourceType.ASSETS),
primary.getArtifacts(ResourceType.RESOURCES),
primary.getRoots(ResourceType.ASSETS),
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 01ebee10b0..6dda4d0552 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
@@ -38,6 +38,7 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute.LateBoundLabel;
import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.AttributeMap;
+import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -101,6 +102,8 @@ public final class AndroidRuleClasses {
fromTemplates("%{name}_symbols/R.txt");
public static final SafeImplicitOutputsFunction ANDROID_SYMBOLS_TXT =
fromTemplates("%{name}_symbols/local-R.txt");
+ public static final ImplicitOutputsFunction ANDROID_LIBRARY_MANIFEST =
+ fromTemplates("%{name}_library_manifest/AndroidManifest.xml");
public static final SafeImplicitOutputsFunction STUB_APPLICATON_MANIFEST =
fromTemplates("%{name}_files/stub/AndroidManifest.xml");
public static final SafeImplicitOutputsFunction FULL_DEPLOY_MARKER =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
index 48852b6765..b20c8c2403 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
@@ -219,10 +219,12 @@ public final class ApplicationManifest {
null, /* Artifact symbolsTxt */
incremental,
data,
- proguardCfg);
+ proguardCfg,
+ null);
}
/** Packages up the manifest with resource and assets from the rule and dependent resources.
+ * @param manifestOut TODO(corysmith):
* @throws InterruptedException */
public ResourceApk packWithDataAndResources(
Artifact resourceApk,
@@ -236,7 +238,9 @@ public final class ApplicationManifest {
String applicationId,
String versionCode,
String versionName,
- boolean incremental, Artifact proguardCfg) throws InterruptedException {
+ boolean incremental,
+ Artifact proguardCfg,
+ Artifact manifestOut) throws InterruptedException {
LocalResourceContainer data = new LocalResourceContainer.Builder(ruleContext)
.withAssets(
AndroidCommon.getAssetDir(ruleContext),
@@ -266,7 +270,8 @@ public final class ApplicationManifest {
versionName,
incremental,
data,
- proguardCfg);
+ proguardCfg,
+ manifestOut);
}
private ResourceApk createApk(Artifact resourceApk,
@@ -281,7 +286,9 @@ public final class ApplicationManifest {
String versionCode,
String versionName,
boolean incremental,
- LocalResourceContainer data, Artifact proguardCfg) throws InterruptedException {
+ LocalResourceContainer data,
+ Artifact proguardCfg,
+ Artifact manifestOut) throws InterruptedException {
ResourceContainer resourceContainer = checkForInlinedResources(
new AndroidResourceContainerBuilder()
.withData(data)
@@ -305,6 +312,7 @@ public final class ApplicationManifest {
.setUncompressedExtensions(uncompressedExtensions)
.setJavaPackage(resourceContainer.getJavaPackage())
.setDebug(ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT)
+ .setManifestOut(manifestOut)
.withPrimary(resourceContainer)
.withDependencies(resourceDeps)
.setDensities(densities)