@@ -55,10 +55,12 @@ load(
5555load (
5656 "//rules:utils.bzl" ,
5757 "ANDROID_SDK_TOOLCHAIN_TYPE" ,
58+ "ANDROID_TOOLCHAIN_TYPE" ,
5859 "get_android_sdk" ,
5960 "get_android_toolchain" ,
6061 _log = "log" ,
6162)
63+ load ("//rules:proguard.bzl" , "proguard" )
6264load ("//rules:visibility.bzl" , "PROJECT_VISIBILITY" )
6365load ("@rules_java//java/common:java_common.bzl" , "java_common" )
6466load (":android_feature_module_rule.bzl" , "get_feature_module_paths" )
@@ -347,8 +349,14 @@ def _impl(ctx):
347349 get_android_toolchain (ctx ).bundletool_module_builder .files_to_run ,
348350 )
349351
352+ feature_module_proguard_mappings = []
353+
350354 # Convert each feature to module zip.
351355 for feature in ctx .attr .feature_modules :
356+ # Collect proguard mapping files from feature modules
357+ if ProguardMappingInfo in feature [AndroidFeatureModuleInfo ].binary :
358+ feature_module_proguard_mappings .append (feature [AndroidFeatureModuleInfo ].binary [ProguardMappingInfo ].proguard_mapping )
359+
352360 proto_apk = ctx .actions .declare_file (
353361 "%s.proto-ap_" % feature .label .name ,
354362 sibling = base_proto_apk ,
@@ -375,9 +383,6 @@ def _impl(ctx):
375383 )
376384
377385 metadata = dict ()
378- if ProguardMappingInfo in ctx .attr .base_module :
379- metadata ["com.android.tools.build.obfuscation/proguard.map" ] = ctx .attr .base_module [ProguardMappingInfo ].proguard_mapping
380-
381386 if ctx .file .device_group_config :
382387 metadata ["com.android.tools.build.bundletool/DeviceGroupConfig.json" ] = ctx .file .device_group_config
383388
@@ -392,6 +397,29 @@ def _impl(ctx):
392397 metadata ["com.android.tools.build.profiles/baseline.prof" ] = base_art_profile_info .baseline_profile
393398 metadata ["com.android.tools.build.profiles/baseline.profm" ] = base_art_profile_info .baseline_profile_metadata
394399
400+ # Collect all proguard mapping files (base + feature modules)
401+ proguard_maps_to_merge = list (feature_module_proguard_mappings )
402+ if ProguardMappingInfo in ctx .attr .base_module :
403+ proguard_maps_to_merge .append (ctx .attr .base_module [ProguardMappingInfo ].proguard_mapping )
404+
405+ if proguard_maps_to_merge :
406+ if len (proguard_maps_to_merge ) == 1 :
407+ # Only one mapping, no need to merge
408+ metadata ["com.android.tools.build.obfuscation/proguard.map" ] = proguard_maps_to_merge [0 ]
409+ else :
410+ # Multiple mappings, merge them
411+ merged_proguard_mapping = ctx .actions .declare_file (ctx .label .name + "_merged_proguard.map" )
412+
413+ # TODO: this isn't working, because `proguard_maps_merger` doesn't exist in the toolchain.
414+ proguard .merge_proguard_maps (
415+ ctx ,
416+ output = merged_proguard_mapping ,
417+ inputs = proguard_maps_to_merge ,
418+ proguard_maps_merger = get_android_toolchain (ctx ).proguard_maps_merger .files_to_run ,
419+ toolchain_type = ANDROID_TOOLCHAIN_TYPE ,
420+ )
421+ metadata ["com.android.tools.build.obfuscation/proguard.map" ] = merged_proguard_mapping
422+
395423 # Create .aab
396424 _bundletool .build (
397425 ctx ,
0 commit comments