xref: /aosp_15_r20/external/bazelbuild-rules_android/mobile_install/adapters/aar_import.bzl (revision 9e965d6fece27a77de5377433c2f7e6999b8cc0b)
1# Copyright 2018 The Bazel Authors. All rights reserved.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#    http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14"""Rule adapter for aar_import."""
15
16load(":adapters/base.bzl", "make_adapter")
17load(
18    ":providers.bzl",
19    "MIAndroidAarNativeLibsInfo",
20    "MIAndroidAssetsInfo",
21    "MIAndroidDexInfo",
22    "MIAndroidResourcesInfo",
23    "MIJavaResourcesInfo",
24    "providers",
25)
26load(":resources.bzl", "liteparse")
27load(":transform.bzl", "dex")
28load("//rules:java.bzl", _java = "java")
29
30def _aspect_attrs():
31    """Attrs of the rule requiring traversal by the aspect."""
32    return ["deps", "exports"]
33
34def _adapt(target, ctx):
35    """Adapts the rule and target data.
36
37    Args:
38      target: The target.
39      ctx: The context.
40
41    Returns:
42      A list of providers.
43    """
44
45    assets = depset()
46    assets_dir = None
47    if AndroidAssetsInfo in target:
48        assets = target[AndroidAssetsInfo].assets
49        assets_dir = target[AndroidAssetsInfo].local_asset_dir
50
51    label = None
52    resources = depset()
53    if AndroidResourcesInfo in target:
54        label = target[AndroidResourcesInfo].label
55        resources = target[AndroidResourcesInfo].direct_android_resources
56
57    return [
58        providers.make_mi_android_aar_native_libs_info(
59            native_libs = target[AndroidNativeLibsInfo].native_libs,
60            deps = providers.collect(
61                MIAndroidAarNativeLibsInfo,
62                ctx.rule.attr.deps,
63                ctx.rule.attr.exports,
64            ),
65        ),
66        providers.make_mi_android_assets_info(
67            assets = assets,
68            assets_dir = assets_dir,
69            deps = providers.collect(
70                MIAndroidAssetsInfo,
71                ctx.rule.attr.deps,
72                ctx.rule.attr.exports,
73            ),
74        ),
75        providers.make_mi_android_dex_info(
76            dex_shards = dex(
77                ctx,
78                target[JavaInfo].runtime_output_jars,
79                target[JavaInfo].transitive_compile_time_jars,
80            ),
81            deps = providers.collect(
82                MIAndroidDexInfo,
83                ctx.rule.attr.deps,
84                ctx.rule.attr.exports,
85            ),
86        ),
87        providers.make_mi_android_resources_info(
88            # TODO(b/124229660): The package for an aar should be retrieved from
89            # the AndroidManifest.xml in the aar. Using the package is a short
90            # term work-around.
91            package = _java.resolve_package_from_label(
92                ctx.label,
93                ctx.rule.attr.package,
94            ),
95            label = label,
96            r_pb = liteparse(ctx),
97            resources = resources,
98            deps = providers.collect(
99                MIAndroidResourcesInfo,
100                ctx.rule.attr.deps,
101                ctx.rule.attr.exports,
102            ),
103        ),
104        providers.make_mi_java_resources_info(
105            deps = providers.collect(
106                MIJavaResourcesInfo,
107                ctx.rule.attr.deps,
108                ctx.rule.attr.exports,
109            ),
110        ),
111    ]
112
113aar_import = make_adapter(_aspect_attrs, _adapt)
114