aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-05-10 10:28:10 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-10 10:30:13 -0700
commitf9e7529908149e0511cc666c8fed879a50dbaea8 (patch)
treec3d5f2a45dca5723e66a601d7c22cbe2e073b538 /src/main/java/com/google/devtools
parent494161c52c886c198f8d71b22896923ea536aa3d (diff)
Create top-level android data provider
This provider wraps the other android data providers, as well as artifacts that should only be made available for top-level Android targets. This provider is required for some output (such as final data APK) to be exposed to Skylark, and also makes it easy to pass information from android_binary data processing to postprocessing actions, most notably resource shrinking (next reviews). RELNOTES: none PiperOrigin-RevId: 196135042
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java82
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ProcessedAndroidData.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java15
7 files changed, 110 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
index b28fd4559f..9cacebfc08 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
@@ -217,7 +217,10 @@ public class AarImport implements RuleConfiguredTargetFactory {
ruleBuilder, javaInfoBuilder, filesToBuild, /*classJar=*/ null);
resourceApk.addToConfiguredTargetBuilder(
- ruleBuilder, ruleContext.getLabel(), /* includeSkylarkApiProvider = */ false);
+ ruleBuilder,
+ ruleContext.getLabel(),
+ /* includeSkylarkApiProvider = */ false,
+ /* isLibrary = */ true);
ruleBuilder
.setFilesToBuild(filesToBuild)
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 049a7dd305..835a2f61a7 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
@@ -569,7 +569,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
zipAlignedApk,
apksUnderTest,
nativeLibs,
- androidCommon.isNeverLink());
+ androidCommon.isNeverLink(),
+ /* isLibrary = */ false);
if (dexPostprocessingOutput.proguardMap() != null) {
builder.addProvider(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java
new file mode 100644
index 0000000000..e17ddefbc9
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java
@@ -0,0 +1,82 @@
+// Copyright 2018 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.rules.android;
+
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.packages.BuiltinProvider;
+import com.google.devtools.build.lib.packages.NativeInfo;
+
+/**
+ * Provides information on Android resource, asset, and manifest information specific to binaries.
+ *
+ * <p>This includes both android_binary targets and other top-level targets (such as
+ * android_local_test)
+ */
+public class AndroidBinaryDataInfo extends NativeInfo {
+ public static final String SKYLARK_NAME = "AndroidBinaryData";
+
+ public static final BuiltinProvider<AndroidBinaryDataInfo> PROVIDER =
+ new BuiltinProvider<AndroidBinaryDataInfo>(SKYLARK_NAME, AndroidBinaryDataInfo.class) {};
+
+ private final Artifact dataApk;
+ private final Artifact resourceProguardConfig;
+
+ private final AndroidResourcesInfo resourcesInfo;
+ private final AndroidAssetsInfo assetsInfo;
+ private final AndroidManifestInfo manifestInfo;
+
+ public static AndroidBinaryDataInfo of(
+ Artifact dataApk,
+ Artifact resourceProguardConfig,
+ AndroidResourcesInfo resourcesInfo,
+ AndroidAssetsInfo assetsInfo,
+ AndroidManifestInfo manifestInfo) {
+ return new AndroidBinaryDataInfo(
+ dataApk, resourceProguardConfig, resourcesInfo, assetsInfo, manifestInfo);
+ }
+
+ private AndroidBinaryDataInfo(
+ Artifact dataApk,
+ Artifact resourceProguardConfig,
+ AndroidResourcesInfo resourcesInfo,
+ AndroidAssetsInfo assetsInfo,
+ AndroidManifestInfo manifestInfo) {
+ super(PROVIDER);
+ this.dataApk = dataApk;
+ this.resourceProguardConfig = resourceProguardConfig;
+ this.resourcesInfo = resourcesInfo;
+ this.assetsInfo = assetsInfo;
+ this.manifestInfo = manifestInfo;
+ }
+
+ public Artifact getApk() {
+ return dataApk;
+ }
+
+ public Artifact getResourceProguardConfig() {
+ return resourceProguardConfig;
+ }
+
+ public AndroidResourcesInfo getResourcesInfo() {
+ return resourcesInfo;
+ }
+
+ public AndroidAssetsInfo getAssetsInfo() {
+ return assetsInfo;
+ }
+
+ public AndroidManifestInfo getManifestInfo() {
+ return manifestInfo;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index fe539531ea..42147be658 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -662,7 +662,8 @@ public class AndroidCommon {
Artifact zipAlignedApk,
Iterable<Artifact> apksUnderTest,
NativeLibs nativeLibs,
- boolean isNeverlink) {
+ boolean isNeverlink,
+ boolean isLibrary) {
idlHelper.addTransitiveInfoProviders(builder, classJar, manifestProtoOutput);
@@ -708,7 +709,7 @@ public class AndroidCommon {
.build();
resourceApk.addToConfiguredTargetBuilder(
- builder, ruleContext.getLabel(), /* includeSkylarkApiProvider = */ true);
+ builder, ruleContext.getLabel(), /* includeSkylarkApiProvider = */ true, isLibrary);
return builder
.setFilesToBuild(filesToBuild)
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 3d557a4b00..3518cb8ce3 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
@@ -220,7 +220,8 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
ImmutableList.<Artifact>of(),
NativeLibs.EMPTY,
// TODO(elenairina): Use JavaCommon.isNeverlink(ruleContext) for consistency among rules.
- androidCommon.isNeverLink());
+ androidCommon.isNeverLink(),
+ /* isLibrary = */ true);
NestedSetBuilder<Artifact> transitiveResourcesJars = collectTransitiveResourceJars(ruleContext);
if (resourceApk.getResourceJavaClassJar() != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ProcessedAndroidData.java b/src/main/java/com/google/devtools/build/lib/rules/android/ProcessedAndroidData.java
index 041e8c9ab1..6cbaa5ee23 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ProcessedAndroidData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ProcessedAndroidData.java
@@ -48,7 +48,7 @@ public class ProcessedAndroidData {
private final Artifact apk;
@Nullable private final Artifact dataBindingInfoZip;
private final ResourceDependencies resourceDeps;
- @Nullable private final Artifact resourceProguardConfig;
+ private final Artifact resourceProguardConfig;
@Nullable private final Artifact mainDexProguardConfig;
/** Processes Android data (assets, resources, and manifest) for android_binary targets. */
@@ -249,7 +249,7 @@ public class ProcessedAndroidData {
Artifact apk,
@Nullable Artifact dataBindingInfoZip,
ResourceDependencies resourceDeps,
- @Nullable Artifact resourceProguardConfig,
+ Artifact resourceProguardConfig,
@Nullable Artifact mainDexProguardConfig) {
return new ProcessedAndroidData(
resources, assets, manifest, rTxt, sourceJar, apk, dataBindingInfoZip, resourceDeps,
@@ -265,7 +265,7 @@ public class ProcessedAndroidData {
Artifact apk,
@Nullable Artifact dataBindingInfoZip,
ResourceDependencies resourceDeps,
- @Nullable Artifact resourceProguardConfig,
+ Artifact resourceProguardConfig,
@Nullable Artifact mainDexProguardConfig) {
this.resources = resources;
this.assets = assets;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
index 7b128596eb..95e7887873 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
@@ -256,7 +256,10 @@ public final class ResourceApk {
}
public void addToConfiguredTargetBuilder(
- RuleConfiguredTargetBuilder builder, Label label, boolean includeSkylarkApiProvider) {
+ RuleConfiguredTargetBuilder builder,
+ Label label,
+ boolean includeSkylarkApiProvider,
+ boolean isLibrary) {
AndroidResourcesInfo resourceInfo = toResourceInfo(label);
builder.addNativeDeclaredProvider(resourceInfo);
@@ -274,6 +277,16 @@ public final class ResourceApk {
}
}
+ if (manifestInfo.isPresent() && assetsInfo.isPresent() && !isLibrary) {
+ builder.addNativeDeclaredProvider(
+ AndroidBinaryDataInfo.of(
+ resourceApk,
+ resourceProguardConfig,
+ resourceInfo,
+ assetsInfo.get(),
+ manifestInfo.get()));
+ }
+
if (includeSkylarkApiProvider) {
builder.addSkylarkTransitiveInfo(
AndroidSkylarkApiProvider.NAME, new AndroidSkylarkApiProvider(resourceInfo));