aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhaoqing Xu <zhaoqxu@google.com>2024-04-18 10:14:55 -0700
committerCopybara-Service <copybara-worker@google.com>2024-04-18 10:15:32 -0700
commit7b11ab5d6f4c98d21fd207f3625d9314aa7915ee (patch)
treeaa719a598dcf0e670799def12557f4013ad5e829
parenteb4b182121eb69070aea347b2588de8e38668ad3 (diff)
downloadbazelbuild-rules_android-7b11ab5d6f4c98d21fd207f3625d9314aa7915ee.tar.gz
Wire up the implicit outputs of the starlark android_binary rule within processor pipeline.
PiperOrigin-RevId: 626073523 Change-Id: I425f474f7390b3052209ece3da2b6dbfb3857f07
-rw-r--r--rules/android_binary_internal/impl.bzl31
-rw-r--r--rules/apk_packaging.bzl10
-rw-r--r--rules/processing_pipeline.bzl3
3 files changed, 33 insertions, 11 deletions
diff --git a/rules/android_binary_internal/impl.bzl b/rules/android_binary_internal/impl.bzl
index a945f81..4f6e858 100644
--- a/rules/android_binary_internal/impl.bzl
+++ b/rules/android_binary_internal/impl.bzl
@@ -431,6 +431,7 @@ def _process_dex(ctx, validation_ctx, packaged_resources_ctx, deploy_ctx, bp_ctx
dex_info = dex_info,
java8_legacy_dex_map = java8_legacy_dex_map,
providers = providers,
+ implicit_outputs = [final_proguard_output_map] if final_proguard_output_map else [],
),
)
@@ -543,6 +544,7 @@ def _process_deploy_jar(ctx, validation_ctx, stamp_ctx, packaged_resources_ctx,
filtered_deploy_jar = filtered_deploy_jar,
one_version_enforcement_output = one_version_enforcement_output,
providers = [],
+ implicit_outputs = [deploy_jar],
),
)
@@ -569,6 +571,7 @@ def finalize(
ctx,
providers,
validation_outputs,
+ implicit_outputs,
packaged_resources_ctx,
apk_packaging_ctx,
resource_shrinking_r8_ctx,
@@ -588,16 +591,11 @@ def finalize(
The list of providers the android_binary_internal rule should return.
"""
if acls.in_android_binary_starlark_rollout(str(ctx.label)):
- files = []
-
- # TODO(zhaoqxu): Add other default outputs from proguard, resource shrinking, dex, etc.
- if apk_packaging_ctx.v4_signature_file:
- files.append(apk_packaging_ctx.v4_signature_file)
-
providers.extend(
[
DefaultInfo(
- files = depset(files),
+ files = depset(implicit_outputs),
+ runfiles = ctx.runfiles(files = implicit_outputs),
),
OutputGroupInfo(
android_deploy_info = [
@@ -764,6 +762,8 @@ def _process_optimize(ctx, validation_ctx, deploy_ctx, packaged_resources_ctx, b
if ctx.file.proguard_apply_mapping and not ctx.files.proguard_specs:
fail("proguard_apply_mapping can only be used when proguard_specs is set")
+ implicit_outputs = []
+
proguard_specs = proguard.get_proguard_specs(
ctx,
packaged_resources_ctx.resource_proguard_config,
@@ -829,6 +829,16 @@ def _process_optimize(ctx, validation_ctx, deploy_ctx, packaged_resources_ctx, b
proguard_tool = get_android_sdk(ctx).proguard,
)
+ if has_proguard_specs:
+ implicit_outputs.extend(
+ [
+ proguard_output.output_jar,
+ proguard_output.config,
+ proguard_output.seeds,
+ proguard_output.usage,
+ ],
+ )
+
shrunk_resource_output = None
if enable_resource_shrinking:
shrunk_resource_output = _resources.shrink(
@@ -842,6 +852,7 @@ def _process_optimize(ctx, validation_ctx, deploy_ctx, packaged_resources_ctx, b
busybox = get_android_toolchain(ctx).android_resources_busybox.files_to_run,
host_javabase = common.get_host_javabase(ctx),
)
+ implicit_outputs.append(shrunk_resource_output.shrinker_log)
optimized_resource_output = _resources.optimize(
ctx,
@@ -852,8 +863,13 @@ def _process_optimize(ctx, validation_ctx, deploy_ctx, packaged_resources_ctx, b
busybox = get_android_toolchain(ctx).android_resources_busybox.files_to_run,
host_javabase = common.get_host_javabase(ctx),
)
+ if optimized_resource_output.path_shortening_map:
+ implicit_outputs.append(optimized_resource_output.path_shortening_map)
providers = []
+
+ # TODO(zhaoqxu): Stop populating AndroidOptimizationInfo once the starlark android_binary rule
+ # is fully rolled out.
providers.append(
AndroidOptimizationInfo(
optimized_jar = proguard_output.output_jar,
@@ -884,6 +900,7 @@ def _process_optimize(ctx, validation_ctx, deploy_ctx, packaged_resources_ctx, b
proguard_output = proguard_output,
resources_apk = optimized_resources_apk,
providers = providers,
+ implicit_outputs = implicit_outputs,
),
)
diff --git a/rules/apk_packaging.bzl b/rules/apk_packaging.bzl
index 6ba8e61..acae2f6 100644
--- a/rules/apk_packaging.bzl
+++ b/rules/apk_packaging.bzl
@@ -16,7 +16,7 @@
load(":java.bzl", "java")
_PROVIDERS = "providers"
-_V4_SIGNATURE_FILE = "v4_signature_file"
+_IMPLICIT_OUTPUTS = "implicit_outputs"
_DEPLOY_INFO = "deploy_info"
_SIGNED_APK = "signed_apk"
@@ -24,7 +24,7 @@ _ApkContextInfo = provider(
"Apk Context Info",
fields = {
_PROVIDERS: "The list of all providers to propagate.",
- _V4_SIGNATURE_FILE: "The v4 signature file.",
+ _IMPLICIT_OUTPUTS: "List of implicit outputs to be built as part of the top-level target.",
_DEPLOY_INFO: "A proto providing information about how to deploy and launch the APK",
_SIGNED_APK: "The signed APK.",
},
@@ -90,7 +90,7 @@ def _process(
Return:
A struct containing all of the requested outputs and providers.
"""
- apk_packaging_ctx = {_PROVIDERS: []}
+ apk_packaging_ctx = {_PROVIDERS: [], _IMPLICIT_OUTPUTS: []}
_build_apk(
ctx,
unsigned_apk,
@@ -107,6 +107,7 @@ def _process(
java_toolchain = java_toolchain,
resource_extractor = resource_extractor,
)
+ apk_packaging_ctx[_IMPLICIT_OUTPUTS].append(unsigned_apk)
# TODO(b/309949683): Consider removing the zipalign action.
zipaligned_apk = ctx.actions.declare_file("zipaligned_" + signed_apk.basename)
@@ -121,6 +122,7 @@ def _process(
v4_signature_file = None
if ctx.fragments.android.apk_signing_method_v4:
v4_signature_file = ctx.actions.declare_file(signed_apk.basename + ".idsig")
+ apk_packaging_ctx[_IMPLICIT_OUTPUTS].append(v4_signature_file)
_sign_apk(
ctx,
@@ -136,6 +138,7 @@ def _process(
)
apk_packaging_ctx[_SIGNED_APK] = signed_apk
+ apk_packaging_ctx[_IMPLICIT_OUTPUTS].append(signed_apk)
deploy_info = ctx.actions.declare_file(ctx.label.name + "_files/deploy_info.deployinfo.pb")
_create_deploy_info(
@@ -159,7 +162,6 @@ def _process(
signing_min_v3_rotation_api_version = signing_key_rotation_min_sdk,
),
)
- apk_packaging_ctx[_V4_SIGNATURE_FILE] = v4_signature_file
apk_packaging_ctx[_DEPLOY_INFO] = deploy_info
return _ApkContextInfo(**apk_packaging_ctx)
diff --git a/rules/processing_pipeline.bzl b/rules/processing_pipeline.bzl
index 6ba2ae7..4eced0e 100644
--- a/rules/processing_pipeline.bzl
+++ b/rules/processing_pipeline.bzl
@@ -16,6 +16,7 @@
PROVIDERS = "providers"
VALIDATION_OUTPUTS = "validation_outputs"
+IMPLICIT_OUTPUTS = "implicit_outputs"
# TODO(djwhang): When a provider type can be retrieved from a Starlark provider
# ProviderInfo is necessary. Once this is possible, processor methods can have a
@@ -72,6 +73,7 @@ def _run(ctx, java_package, processing_pipeline):
java_package = java_package,
providers = [],
validation_outputs = [],
+ implicit_outputs = [],
runfiles = ctx.runfiles(),
)
@@ -83,6 +85,7 @@ def _run(ctx, java_package, processing_pipeline):
target_ctx[info.name] = info.value
target_ctx[PROVIDERS].extend(getattr(info.value, PROVIDERS, []))
target_ctx[VALIDATION_OUTPUTS].extend(getattr(info.value, VALIDATION_OUTPUTS, []))
+ target_ctx[IMPLICIT_OUTPUTS].extend(getattr(info.value, IMPLICIT_OUTPUTS, []))
if hasattr(info, "runfiles") and info.runfiles:
target_ctx["runfiles"] = target_ctx["runfiles"].merge(info.runfiles)