Add support for aar_import_external and aar_maven_import_external
Usage example:
```python
# In WORKSPACE
load("@bazel_tools//tools/build_defs/repo:android.bzl", "aar_import_external", "aar_maven_import_external")
# Specify the URL directly:
aar_import_external(
name = "com_android_support_preference_v14_25_1_0", # required
licenses = ["notice"], # required
aar_urls = [ # required
"https://dl.google.com/dl/android/maven2/com/android/support/preference-v14/25.1.0/preference-v14-25.1.0.aar"
],
aar_sha256 = "442473fe5c395ebef26c14eb01d17ceda33ad207a4cc23a32a2ad95b87edfabb", # optional or empty string
deps = [ # optional or empty list
"@com_android_support_recyclerview_v7_25_1_0//aar",
"@com_android_support_appcompat_v7_25_1_0//aar",
"@com_android_support_preference_v7_25_1_0//aar",
"@com_android_support_support_v4_25_1_0//aar",
],
)
# Or, specify the artifact coordinate:
aar_maven_import_external(
name = "com_android_support_preference_v14_25_1_0", # required
artifact = "com.android.support.test:preference-v14:25.1.0", # required
sha256 = "442473fe5c395ebef26c14eb01d17ceda33ad207a4cc23a32a2ad95b87edfabb" # optional or empty string
licenses = ["notice"], # required
server_urls = ["https://maven.google.com"], # required
deps = [ # optional or empty list
"@com_android_support_recyclerview_v7_25_1_0//aar",
"@com_android_support_appcompat_v7_25_1_0//aar",
"@com_android_support_preference_v7_25_1_0//aar",
"@com_android_support_support_v4_25_1_0//aar",
],
)
# In BUILD.bazel
android_library(
name = "foo",
srcs = [...],
deps = [
"@com_android_support_preference_v14_25_1_0//aar",
],
)
```
To test this out with gmaven_rules, change the `load` statement in https://github.com/bazelbuild/gmaven_rules/blob/master/gmaven.bzl to
```
load('@bazel_tools//tools/build_defs/repo:android.bzl', 'aar_import_external')
load('@bazel_tools//tools/build_defs/repo:java.bzl', 'java_import_external')
```
Fixes https://github.com/bazelbuild/bazel/issues/4654
RELNOTES: New rules for importing Android dependencies: `aar_import_external` and `aar_maven_import_external`. `aar_import_external` enables specifying external AAR dependencies using a list of HTTP URLs for the artifact. `aar_maven_import_external` enables specifying external AAR dependencies using the artifact coordinate and a list of server URLs.
Closes #5319.
Change-Id: I9517e68ab78f2e30fb6ceabfe3b35061c585d607
PiperOrigin-RevId: 199839047
diff --git a/tools/build_defs/repo/android.bzl b/tools/build_defs/repo/android.bzl
new file mode 100644
index 0000000..1e0e9ca
--- /dev/null
+++ b/tools/build_defs/repo/android.bzl
@@ -0,0 +1,85 @@
+# 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.
+"""Rules for importing external Android Archives (AARs).
+
+Usage:
+
+ # In WORKSPACE
+ load("@bazel_tools//tools/build_defs/repo:android.bzl", "aar_import_external", "aar_maven_import_external")
+
+ # Specify the URL directly:
+ aar_import_external(
+ name = "com_android_support_preference_v14_25_1_0", # required
+ licenses = ["notice"], # required
+ aar_urls = [ # required
+ "https://dl.google.com/dl/android/maven2/com/android/support/preference-v14/25.1.0/preference-v14-25.1.0.aar"
+ ],
+ aar_sha256 = "442473fe5c395ebef26c14eb01d17ceda33ad207a4cc23a32a2ad95b87edfabb", # optional or empty string
+ deps = [ # optional or empty list
+ "@com_android_support_recyclerview_v7_25_1_0//aar",
+ "@com_android_support_appcompat_v7_25_1_0//aar",
+ "@com_android_support_preference_v7_25_1_0//aar",
+ "@com_android_support_support_v4_25_1_0//aar",
+ ],
+ )
+
+ # Or, specify the artifact coordinate:
+ aar_maven_import_external(
+ name = "com_android_support_preference_v14_25_1_0", # required
+ artifact = "com.android.support.test:preference-v14:25.1.0", # required
+ sha256 = "442473fe5c395ebef26c14eb01d17ceda33ad207a4cc23a32a2ad95b87edfabb" # optional or empty string
+ licenses = ["notice"], # required
+ server_urls = ["https://maven.google.com"], # required
+ deps = [ # optional or empty list
+ "@com_android_support_recyclerview_v7_25_1_0//aar",
+ "@com_android_support_appcompat_v7_25_1_0//aar",
+ "@com_android_support_preference_v7_25_1_0//aar",
+ "@com_android_support_support_v4_25_1_0//aar",
+ ],
+ )
+
+ # In BUILD.bazel
+ android_library(
+ name = "foo",
+ srcs = [...],
+ deps = [
+ "@com_android_support_preference_v14_25_1_0//aar",
+ ],
+ )
+"""
+
+load(":jvm.bzl", "convert_artifact_coordinate_to_urls", "jvm_import_external")
+
+def aar_import_external(aar_sha256, aar_urls, **kwargs):
+ jvm_import_external(
+ rule_name = "aar_import",
+ rule_metadata = {
+ "extension": "aar",
+ "import_attr": "aar = %s",
+ },
+ artifact_sha256 = aar_sha256,
+ artifact_urls = aar_urls,
+ **kwargs
+ )
+
+def aar_maven_import_external(artifact, server_urls, aar_sha256 = "", **kwargs):
+ aar_import_external(
+ aar_sha256 = aar_sha256,
+ aar_urls = convert_artifact_coordinate_to_urls(
+ artifact,
+ server_urls,
+ "aar",
+ ),
+ **kwargs
+ )