aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhaoqing Xu <zhaoqxu@google.com>2023-10-05 18:27:39 -0700
committerCopybara-Service <copybara-worker@google.com>2023-10-05 18:28:08 -0700
commit7c9d553f7f2966f283beb455746595b6420bf836 (patch)
tree53376a50b481d7703b695b8cb35d6250b08d24d4
parent0ed032dcd4c9b1d4baf79404c21d6722c578b399 (diff)
downloadbazelbuild-rules_android-7c9d553f7f2966f283beb455746595b6420bf836.tar.gz
Always pass proguard implicit output artifacts to Native and symlink them.
When determining implicit outputs, it's not possible to know the configuration of the arrtibute `proguard_specs`, so these implicit output artifacts should always be generated and passed to Native. If the proguard specs turns out to be an empty list at analysis time, they will not be used in dexing and further actions. If users try to request any of them, the build will fail. PiperOrigin-RevId: 571191172 Change-Id: I14a4200e0e022909c874603c1b7c14187c22a0fe
-rw-r--r--rules/android_binary_internal/impl.bzl17
-rw-r--r--rules/proguard.bzl18
2 files changed, 23 insertions, 12 deletions
diff --git a/rules/android_binary_internal/impl.bzl b/rules/android_binary_internal/impl.bzl
index e49b628..0c156de 100644
--- a/rules/android_binary_internal/impl.bzl
+++ b/rules/android_binary_internal/impl.bzl
@@ -658,7 +658,6 @@ def _process_optimize(ctx, deploy_ctx, packaged_resources_ctx, bp_ctx, **_unused
proguard_specs_for_manifest = [packaged_resources_ctx.resource_minsdk_proguard_config] if packaged_resources_ctx.resource_minsdk_proguard_config else [],
)
has_proguard_specs = bool(proguard_specs)
- proguard_output = struct()
is_resource_shrinking_enabled = _resources.is_resource_shrinking_enabled(
ctx.attr.shrink_resources,
@@ -741,14 +740,14 @@ def _process_optimize(ctx, deploy_ctx, packaged_resources_ctx, bp_ctx, **_unused
providers = []
providers.append(
AndroidOptimizationInfo(
- optimized_jar = proguard_output.output_jar if proguard_output else None,
- mapping = proguard_output.mapping if proguard_output else None,
- seeds = proguard_output.seeds if proguard_output else None,
- library_jar = proguard_output.library_jar if proguard_output else None,
- config = proguard_output.config if proguard_output else None,
- proto_mapping = proguard_output.proto_mapping if proguard_output else None,
- rewritten_startup_profile = proguard_output.startup_profile_rewritten if proguard_output else None,
- rewriten_merged_baseline_profile = proguard_output.baseline_profile_rewritten if proguard_output else None,
+ optimized_jar = proguard_output.output_jar,
+ mapping = proguard_output.mapping,
+ seeds = proguard_output.seeds,
+ library_jar = proguard_output.library_jar,
+ config = proguard_output.config,
+ proto_mapping = proguard_output.proto_mapping,
+ rewritten_startup_profile = proguard_output.startup_profile_rewritten,
+ rewriten_merged_baseline_profile = proguard_output.baseline_profile_rewritten,
optimized_resource_apk = optimized_resource_output.resources_apk,
shrunk_resource_apk = shrunk_resource_output.resources_apk if shrunk_resource_output else None,
shrunk_resource_zip = shrunk_resource_output.resources_zip if shrunk_resource_output else None,
diff --git a/rules/proguard.bzl b/rules/proguard.bzl
index 374e2f8..9599658 100644
--- a/rules/proguard.bzl
+++ b/rules/proguard.bzl
@@ -355,17 +355,29 @@ def _apply_proguard(
A struct of proguard outputs.
"""
if not proguard_specs:
+ outputs = _get_proguard_output(
+ ctx,
+ proguard_output_jar = proguard_output_jar,
+ proguard_seeds = None,
+ proguard_usage = None,
+ proguard_output_map = proguard_output_map,
+ combined_library_jar = None,
+ startup_profile_rewritten = None,
+ baseline_profile_rewritten = None,
+ )
+
# Fail at execution time if these artifacts are requested, to avoid issue where outputs are
# declared without having any proguard specs. This can happen if specs is a select() that
# resolves to an empty list.
_fail_action(
ctx,
- proguard_output_jar,
- proguard_output_map,
+ outputs.output_jar,
+ outputs.mapping,
+ outputs.config,
proguard_seeds,
proguard_usage,
)
- return None
+ return outputs
library_jar_list = [get_android_sdk(ctx).android_jar]
if ctx.fragments.android.desugar_java8: