Skip to content

Commit 4d719e1

Browse files
ajsinclaircopybara-github
authored andcommitted
Merge the desugar globals classes into the final APK in a standalone dex shard.
This treats it similarly to the Java 8 legacy dex. Adding the globals during dexmerging was incorrect. It attempted to merge the globals into each shard. The shards are carefully crafted by the DexFileSplitter to avoid going over dex method limits. This led to build failures where we exceeded the limits. It also meant we were merging the globals into every shard instead of just once per APK. A nice side effect is that this removes the dependency on Bazel 7.4.0+ since we do not need the additional parameter in the android_common.create_dex_merger_actions call. PiperOrigin-RevId: 691179644 Change-Id: Idd994c1a59286febbfd4398d1e1cd5721198793d
1 parent f0de7b9 commit 4d719e1

File tree

2 files changed

+16
-23
lines changed

2 files changed

+16
-23
lines changed

rules/android_binary/impl.bzl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -406,11 +406,15 @@ def _process_dex(ctx, validation_ctx, packaged_resources_ctx, deploy_ctx, bp_ctx
406406
toolchain_type = ANDROID_TOOLCHAIN_TYPE,
407407
)
408408

409-
_dex.append_java8_legacy_dex(
409+
dexes_to_append = []
410+
if acls.in_record_desugaring_rollout(str(ctx.label)) and not is_binary_optimized:
411+
dexes_to_append.append(utils.only(get_android_toolchain(ctx).desugar_globals_dex_archive.files.to_list()))
412+
dexes_to_append.append(java8_legacy_dex)
413+
_dex.append_desugar_dexes(
410414
ctx,
411415
output = final_classes_dex_zip,
412416
input = classes_dex_zip,
413-
java8_legacy_dex = java8_legacy_dex,
417+
dexes = dexes_to_append,
414418
dex_zips_merger = get_android_toolchain(ctx).dex_zips_merger.files_to_run,
415419
)
416420
else:

rules/dex.bzl

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -189,22 +189,16 @@ def _process_incremental_dexing(
189189
toolchain_type = toolchain_type,
190190
)
191191

192-
# TODO(asinclair): Remove this once the rollout is complete.
193-
dex_merger_actions_args = dict(
192+
# TODO(b/130571505): Implement this after SpawnActionTemplate is supported in Starlark
193+
android_common.create_dex_merger_actions(
194+
ctx,
194195
output = dexes,
195196
input = shards,
196197
dexopts = dexopts,
197198
dexmerger = dexmerger,
198199
min_sdk_version = min_sdk_version,
199200
)
200-
if acls.in_record_desugaring_rollout(str(ctx.label)):
201-
dex_merger_actions_args["desugar_globals"] = utils.only(get_android_toolchain(ctx).desugar_globals.files.to_list())
202201

203-
# TODO(b/130571505): Implement this after SpawnActionTemplate is supported in Starlark
204-
android_common.create_dex_merger_actions(
205-
ctx,
206-
**dex_merger_actions_args
207-
)
208202
_java.singlejar(
209203
ctx,
210204
output = output,
@@ -379,27 +373,22 @@ def _shard_dexes(
379373

380374
return output
381375

382-
def _append_java8_legacy_dex(
383-
ctx,
384-
output = None,
385-
input = None,
386-
java8_legacy_dex = None,
387-
dex_zips_merger = None):
376+
def _append_desugar_dexes(ctx, output = None, input = None, dexes = None, dex_zips_merger = None):
388377
args = ctx.actions.args()
389378

390-
# Order matters here: we want java8_legacy_dex to be the highest-numbered classesN.dex
379+
# Order matters here: we want the additional dex(s) to be the highest-numbered classesN.dex
391380
args.add("--input_zip", input)
392-
args.add("--input_zip", java8_legacy_dex)
381+
args.add_all(dexes, before_each = "--input_zip")
393382
args.add("--output_zip", output)
394383

395384
ctx.actions.run(
396385
executable = dex_zips_merger,
397-
inputs = [input, java8_legacy_dex],
386+
inputs = [input] + dexes,
398387
outputs = [output],
399388
arguments = [args],
400-
mnemonic = "AppendJava8LegacyDex",
401389
use_default_shell_env = True,
402-
progress_message = "Adding Java8 legacy library for %s" % ctx.label,
390+
mnemonic = "AppendDesugarDexes",
391+
progress_message = "Adding Desugar dex file(s) for %s" % ctx.label,
403392
toolchain = ANDROID_TOOLCHAIN_TYPE,
404393
)
405394

@@ -842,7 +831,7 @@ def _transform_dex_list_through_proguard_map(
842831
return obfuscated_main_dex_list
843832

844833
dex = struct(
845-
append_java8_legacy_dex = _append_java8_legacy_dex,
834+
append_desugar_dexes = _append_desugar_dexes,
846835
dex = _dex,
847836
dex_merge = _dex_merge,
848837
generate_main_dex_list = _generate_main_dex_list,

0 commit comments

Comments
 (0)