aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-05-29 08:05:47 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-29 08:07:24 -0700
commit6ee1a8184bd2afd21da7c96359d202ad43d32264 (patch)
tree3ed8cb769676e63fd51f646fa3ea82d93601ef3f /src/main/java
parent7fcbc8ffdead028d19606fefa2fa3be13781da98 (diff)
Move Android data info classes to skylarkbuildapi
Expose all Android data info classes as interfaces in skylarkbuildapi. Most methods are not exposed in the interface since they are not exposed in Skylark. In fact, stop exposing a few methods from AndroidResourcesInfo that are exposed but shouldn't be. RELNOTES: none PiperOrigin-RevId: 198396677
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java36
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryDataInfo.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataContext.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestInfo.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java60
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataInfoApi.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataSettingsApi.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataContextApi.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryAarInfoApi.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidManifestInfoApi.java44
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidResourcesInfoApi.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD27
16 files changed, 292 insertions, 93 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 1c037a0f57..8b04b5e418 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -57,6 +57,7 @@ filegroup(
"//src/main/java/com/google/devtools/build/lib/skyframe/packages:srcs",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization:srcs",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi:srcs",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android:srcs",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple:srcs",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp:srcs",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java:srcs",
@@ -1136,6 +1137,8 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/rules/config",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android",
"//src/main/java/com/google/devtools/build/lib/vfs",
"//src/main/java/com/google/devtools/common/options",
"//src/main/protobuf:android_deploy_info_java_proto",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
index ff51d94ae2..334dba204c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
@@ -22,18 +22,12 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidAssetsInfoApi;
import java.util.Optional;
import javax.annotation.Nullable;
/** Provides information about transitive Android assets. */
-@SkylarkModule(
- name = "AndroidAssetsInfo",
- doc = "Information about the Android assets provided by a rule.",
- category = SkylarkModuleCategory.PROVIDER)
-public class AndroidAssetsInfo extends NativeInfo {
+public class AndroidAssetsInfo extends NativeInfo implements AndroidAssetsInfoApi {
private static final String SKYLARK_NAME = "AndroidAssetsInfo";
@@ -100,17 +94,7 @@ public class AndroidAssetsInfo extends NativeInfo {
return label;
}
- @SkylarkCallable(
- name = "validation_result",
- structField = true,
- allowReturnNones = true,
- doc =
- "If not None, represents the output of asset merging and validation for this target. The"
- + " action to merge and validate assets is not run be default; to force it, add this"
- + " artifact to your target's outputs. The validation action is somewhat expensive -"
- + " in native code, this artifact is added to the top-level output group (so"
- + " validation is only done if the target is requested on the command line). The"
- + " contents of this artifact are subject to change and should not be relied upon.")
+ @Override
@Nullable
public Artifact getValidationResult() {
return validationResult;
@@ -120,22 +104,12 @@ public class AndroidAssetsInfo extends NativeInfo {
return directParsedAssets;
}
- /** Returns the local assets for the target. */
- @SkylarkCallable(
- name = "local_assets",
- doc = "Returns the local assets for the target.",
- allowReturnNones = true,
- structField = true)
+ @Override
public ImmutableList<Artifact> getLocalAssets() {
return getLocalParsedAndroidAssets().map(AndroidAssets::getAssets).orElse(null);
}
- /** Returns the local asset dir for the target. */
- @SkylarkCallable(
- name = "local_asset_dir",
- doc = "Returns the local asset directory for the target.",
- allowReturnNones = true,
- structField = true)
+ @Override
public String getLocalAssetDir() {
return getLocalParsedAndroidAssets().map(AndroidAssets::getAssetDirAsString).orElse(null);
}
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
index d3de6d02ba..b24a632de2 100644
--- 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
@@ -16,6 +16,7 @@ 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;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidBinaryDataInfoApi;
/**
* Provides information on Android resource, asset, and manifest information specific to binaries.
@@ -23,8 +24,8 @@ import com.google.devtools.build.lib.packages.NativeInfo;
* <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 class AndroidBinaryDataInfo extends NativeInfo implements AndroidBinaryDataInfoApi {
+ private static final String SKYLARK_NAME = "AndroidBinaryData";
public static final BuiltinProvider<AndroidBinaryDataInfo> PROVIDER =
new BuiltinProvider<AndroidBinaryDataInfo>(SKYLARK_NAME, AndroidBinaryDataInfo.class) {};
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataContext.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataContext.java
index 8d52db5e90..863785cec4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataContext.java
@@ -23,7 +23,7 @@ import com.google.devtools.build.lib.analysis.config.CompilationMode;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidDataContextApi;
/**
* Wraps common tools and settings used for working with Android assets, resources, and manifests.
@@ -36,13 +36,7 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
* bundle them together. Additionally, this class includes some common tools (such as an SDK) that
* are used in BusyBox actions.
*/
-@SkylarkModule(
- name = "AndroidDataContext",
- doc =
- "Wraps common tools and settings used for working with Android assets, resources, and"
- + " manifests")
-public class AndroidDataContext {
-
+public class AndroidDataContext implements AndroidDataContextApi {
private final Label label;
private final ActionConstructionContext actionConstructionContext;
private final FilesToRunProvider busybox;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
index 5258d27128..e829a437b3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
@@ -24,8 +24,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidLibraryAarInfoApi;
import java.util.Objects;
import javax.annotation.Nullable;
@@ -33,12 +32,8 @@ import javax.annotation.Nullable;
* A target that can provide the aar artifact of Android libraries and all the manifests that are
* merged into the main aar manifest.
*/
-@SkylarkModule(
- name = "AndroidLibraryAarInfo",
- doc = "Android AARs provided by a library rule and its dependencies",
- category = SkylarkModuleCategory.PROVIDER)
@Immutable
-public class AndroidLibraryAarInfo extends NativeInfo {
+public class AndroidLibraryAarInfo extends NativeInfo implements AndroidLibraryAarInfoApi {
private static final String SKYLARK_NAME = "AndroidLibraryAarInfo";
public static final NativeProvider<AndroidLibraryAarInfo> PROVIDER =
new NativeProvider<AndroidLibraryAarInfo>(AndroidLibraryAarInfo.class, SKYLARK_NAME) {};
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestInfo.java
index bdd182d9c8..872881f9bd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifestInfo.java
@@ -18,22 +18,13 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidManifestInfoApi;
import com.google.devtools.build.lib.syntax.Environment;
import com.google.devtools.build.lib.syntax.FunctionSignature;
import com.google.devtools.build.lib.syntax.SkylarkType;
/** A provider of information about this target's manifest. */
-@SkylarkModule(
- name = "AndroidManifestInfo",
- doc =
- "Information about the Android manifest provided by a rule. Note that, as of now, the"
- + " information exposed in this object is not directly consumed by Android rules -"
- + " instead, use an AndroidResourcesInfo.",
- category = SkylarkModuleCategory.PROVIDER)
-public class AndroidManifestInfo extends NativeInfo {
+public class AndroidManifestInfo extends NativeInfo implements AndroidManifestInfoApi {
private static final String SKYLARK_NAME = "AndroidManifestInfo";
private static final FunctionSignature.WithValues<Object, SkylarkType> SIGNATURE =
@@ -78,23 +69,17 @@ public class AndroidManifestInfo extends NativeInfo {
this.exportsManifest = exportsManifest;
}
- @SkylarkCallable(
- name = "manifest",
- doc = "This target's manifest, merged with manifests from dependencies",
- structField = true)
+ @Override
public Artifact getManifest() {
return manifest;
}
- @SkylarkCallable(name = "package", doc = "This target's package", structField = true)
+ @Override
public String getPackage() {
return pkg;
}
- @SkylarkCallable(
- name = "exports_manifest",
- doc = "If this manifest should be exported to targets that depend on it",
- structField = true)
+ @Override
public boolean exportsManifest() {
return exportsManifest;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
index 4ab92d5e42..8f22a47360 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
@@ -19,17 +19,11 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidResourcesInfoApi;
/** A provider that supplies ResourceContainers from its transitive closure. */
-@SkylarkModule(
- name = "AndroidResourcesInfo",
- doc = "Android resources provided by a rule",
- category = SkylarkModuleCategory.PROVIDER)
@Immutable
-public class AndroidResourcesInfo extends NativeInfo {
+public class AndroidResourcesInfo extends NativeInfo implements AndroidResourcesInfoApi {
private static final String SKYLARK_NAME = "AndroidResourcesInfo";
public static final NativeProvider<AndroidResourcesInfo> PROVIDER =
@@ -97,7 +91,6 @@ public class AndroidResourcesInfo extends NativeInfo {
}
/** Returns the label that is associated with this piece of information. */
- @SkylarkCallable(name = "label", doc = "Returns the label for this target.", structField = true)
public Label getLabel() {
return label;
}
@@ -107,28 +100,17 @@ public class AndroidResourcesInfo extends NativeInfo {
}
/** Returns the r.txt file for the target. */
- @SkylarkCallable(
- name = "r_txt",
- doc = "Returns the R.txt file for the target.",
- structField = true)
+ @Override
public Artifact getRTxt() {
return rTxt;
}
/** Returns the transitive ResourceContainers for the label. */
- @SkylarkCallable(
- name = "transitive_android_resources",
- doc = "Returns the transitive android resources for the label.",
- structField = true)
public NestedSet<ValidatedAndroidData> getTransitiveAndroidResources() {
return transitiveAndroidResources;
}
/** Returns the immediate ResourceContainers for the label. */
- @SkylarkCallable(
- name = "direct_android_resources",
- doc = "Returns the immediate android resources for the label.",
- structField = true)
public NestedSet<ValidatedAndroidData> getDirectAndroidResources() {
return directAndroidResources;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
index e95f516682..b4b5ff51ca 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkData.java
@@ -34,6 +34,7 @@ import com.google.devtools.build.lib.rules.android.AndroidLibraryAarInfo.Aar;
import com.google.devtools.build.lib.rules.java.JavaCompilationInfoProvider;
import com.google.devtools.build.lib.rules.java.JavaInfo;
import com.google.devtools.build.lib.rules.java.ProguardSpecProvider;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidBinaryDataSettingsApi;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
@@ -981,10 +982,7 @@ public abstract class AndroidSkylarkData {
env);
}
- @SkylarkModule(
- name = "AndroidBinaryDataSettings",
- doc = "Wraps common settings for working with android_binary assets, resources, and manifest")
- private static class BinaryDataSettings {
+ private static class BinaryDataSettings implements AndroidBinaryDataSettingsApi {
private final AndroidAaptVersion aaptVersion;
private final boolean shrinkResources;
private final ResourceFilterFactory resourceFilterFactory;
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java
new file mode 100644
index 0000000000..3d1aa707a1
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java
@@ -0,0 +1,60 @@
+// 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.skylarkbuildapi.android;
+
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import javax.annotation.Nullable;
+
+/** Provides information about transitive Android assets. */
+@SkylarkModule(
+ name = "AndroidAssetsInfo",
+ doc = "Information about the Android assets provided by a rule.",
+ category = SkylarkModuleCategory.PROVIDER)
+public interface AndroidAssetsInfoApi extends StructApi {
+
+ @SkylarkCallable(
+ name = "validation_result",
+ structField = true,
+ allowReturnNones = true,
+ doc =
+ "If not None, represents the output of asset merging and validation for this target. The"
+ + " action to merge and validate assets is not run be default; to force it, add this"
+ + " artifact to your target's outputs. The validation action is somewhat expensive -"
+ + " in native code, this artifact is added to the top-level output group (so"
+ + " validation is only done if the target is requested on the command line). The"
+ + " contents of this artifact are subject to change and should not be relied upon.")
+ @Nullable
+ FileApi getValidationResult();
+
+ /** Returns the local assets for the target. */
+ @SkylarkCallable(
+ name = "local_assets",
+ doc = "Returns the local assets for the target.",
+ allowReturnNones = true,
+ structField = true)
+ ImmutableList<? extends FileApi> getLocalAssets();
+
+ /** Returns the local asset dir for the target. */
+ @SkylarkCallable(
+ name = "local_asset_dir",
+ doc = "Returns the local asset directory for the target.",
+ allowReturnNones = true,
+ structField = true)
+ String getLocalAssetDir();
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataInfoApi.java
new file mode 100644
index 0000000000..b13fa2aa7a
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataInfoApi.java
@@ -0,0 +1,28 @@
+// 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.skylarkbuildapi.android;
+
+import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+
+/**
+ * Provides information on Android resource, asset, and manifest information specific to binaries.
+ */
+@SkylarkModule(
+ name = "AndroidBinaryData",
+ doc =
+ "Information about Android resource, asset, and manifest information specific to binaries",
+ category = SkylarkModuleCategory.PROVIDER)
+public interface AndroidBinaryDataInfoApi extends StructApi {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataSettingsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataSettingsApi.java
new file mode 100644
index 0000000000..491a2e8524
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidBinaryDataSettingsApi.java
@@ -0,0 +1,22 @@
+// 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.skylarkbuildapi.android;
+
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+
+/** Wraps common settings for working with android binary assets, resources, and manifests. */
+@SkylarkModule(
+ name = "AndroidBinaryDataSettings",
+ doc = "Wraps common settings for working with android binary assets, resources, and manifest")
+public interface AndroidBinaryDataSettingsApi {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataContextApi.java
new file mode 100644
index 0000000000..22ba511e2b
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidDataContextApi.java
@@ -0,0 +1,26 @@
+// 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.skylarkbuildapi.android;
+
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+
+/**
+ * Wraps common tools and settings used for working with Android assets, resources, and manifests.
+ */
+@SkylarkModule(
+ name = "AndroidDataContext",
+ doc =
+ "Wraps common tools and settings used for working with Android assets, resources, and"
+ + " manifests")
+public interface AndroidDataContextApi {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryAarInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryAarInfoApi.java
new file mode 100644
index 0000000000..df4a4c892c
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryAarInfoApi.java
@@ -0,0 +1,25 @@
+// 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.skylarkbuildapi.android;
+
+import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+
+/** A target that can provide the aar artifact of Android libraries */
+@SkylarkModule(
+ name = "AndroidLibraryAarInfo",
+ doc = "Android AARs provided by a library rule and its dependencies",
+ category = SkylarkModuleCategory.PROVIDER)
+public interface AndroidLibraryAarInfoApi extends StructApi {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidManifestInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidManifestInfoApi.java
new file mode 100644
index 0000000000..e45e2f33f4
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidManifestInfoApi.java
@@ -0,0 +1,44 @@
+// 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.skylarkbuildapi.android;
+
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+
+/** A provider of information about this target's manifest. */
+@SkylarkModule(
+ name = "AndroidManifestInfo",
+ doc =
+ "Information about the Android manifest provided by a rule.",
+ category = SkylarkModuleCategory.PROVIDER)
+public interface AndroidManifestInfoApi extends StructApi {
+
+ @SkylarkCallable(
+ name = "manifest",
+ doc = "This target's manifest, merged with manifests from dependencies",
+ structField = true)
+ FileApi getManifest();
+
+ @SkylarkCallable(name = "package", doc = "This target's package", structField = true)
+ String getPackage();
+
+ @SkylarkCallable(
+ name = "exports_manifest",
+ doc = "If this manifest should be exported to targets that depend on it",
+ structField = true)
+ boolean exportsManifest();
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidResourcesInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidResourcesInfoApi.java
new file mode 100644
index 0000000000..67523c1471
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidResourcesInfoApi.java
@@ -0,0 +1,35 @@
+// 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.skylarkbuildapi.android;
+
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
+import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+
+/** A provider that supplies resource information from its transitive closure. */
+@SkylarkModule(
+ name = "AndroidResourcesInfo",
+ doc = "Android resources provided by a rule",
+ category = SkylarkModuleCategory.PROVIDER)
+public interface AndroidResourcesInfoApi extends StructApi {
+
+ /** Returns the r.txt file for the target. */
+ @SkylarkCallable(
+ name = "r_txt",
+ doc = "Returns the R.txt file for the target.",
+ structField = true)
+ FileApi getRTxt();
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD
new file mode 100644
index 0000000000..e92b16175e
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD
@@ -0,0 +1,27 @@
+# Description:
+# This package contains interfaces representing the skylark "build API"
+# (but not the implementation of that API). Ultimately, this package
+# may be broken out of the Bazel package hierarchy to be standalone.
+# Thus, this package should not depend on Bazel-specific packages (only
+# those which contain pure-Skylark concepts, such as the interpreter or
+# annotation interfaces).
+
+package(default_visibility = ["//src/main/java/com/google/devtools/build/lib:__pkg__"])
+
+licenses(["notice"]) # Apache 2.0
+
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+)
+
+java_library(
+ name = "android",
+ srcs = glob(["*.java"]),
+ deps = [
+ "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
+ "//third_party:guava",
+ "//third_party:jsr305",
+ ],
+)