diff options
author | Zhaoqing Xu <zhaoqxu@google.com> | 2024-04-18 10:14:55 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-04-18 10:15:32 -0700 |
commit | 7b11ab5d6f4c98d21fd207f3625d9314aa7915ee (patch) | |
tree | aa719a598dcf0e670799def12557f4013ad5e829 | |
parent | eb4b182121eb69070aea347b2588de8e38668ad3 (diff) | |
download | bazelbuild-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.bzl | 31 | ||||
-rw-r--r-- | rules/apk_packaging.bzl | 10 | ||||
-rw-r--r-- | rules/processing_pipeline.bzl | 3 |
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) |