diff --git a/rules/android_binary/impl.bzl b/rules/android_binary/impl.bzl index 8d0ef2f10..40842f06d 100644 --- a/rules/android_binary/impl.bzl +++ b/rules/android_binary/impl.bzl @@ -799,7 +799,7 @@ def _process_optimize(ctx, validation_ctx, deploy_ctx, packaged_resources_ctx, b # Proguard map from shrinking is the final output. proguard_output_map = ctx.actions.declare_file(ctx.label.name + "_proguard.map") - if ctx.attr._generate_proguard_outputs: + if not acls.use_r8(str(ctx.label)) and ctx.attr._generate_proguard_outputs: proguard_output_jar = ctx.outputs.proguard_jar proguard_output_config = ctx.outputs.proguard_config else: diff --git a/test/rules/android_binary/r8_integration/BUILD b/test/rules/android_binary/r8_integration/BUILD index 6f7646c39..b399c793e 100644 --- a/test/rules/android_binary/r8_integration/BUILD +++ b/test/rules/android_binary/r8_integration/BUILD @@ -10,6 +10,7 @@ py_test( "//test/rules/android_binary/r8_integration/java/com/basicapp:basic_app_R8_no_shrink", "//test/rules/android_binary/r8_integration/java/com/basicapp:basic_app_R8_shrink", "//test/rules/android_binary/r8_integration/java/com/basicapp:basic_app_no_R8", + "//test/rules/android_binary/r8_integration/java/com/basicapp:basic_app_select_R8_genmap", "@androidsdk//:dexdump", ], ) diff --git a/test/rules/android_binary/r8_integration/java/com/basicapp/BUILD b/test/rules/android_binary/r8_integration/java/com/basicapp/BUILD index 71e319335..0c69d09eb 100644 --- a/test/rules/android_binary/r8_integration/java/com/basicapp/BUILD +++ b/test/rules/android_binary/r8_integration/java/com/basicapp/BUILD @@ -16,24 +16,41 @@ load("//rules:rules.bzl", "android_binary", "android_library") proguard_specs = specs, resource_files = glob(["res/**"]), shrink_resources = shrink, + proguard_generate_mapping = genmap, visibility = ["//test/rules/android_binary/r8_integration:__pkg__"], deps = [ ":basic_lib", ":lib_with_specs", ], ) - for name, specs, shrink in [ + for name, specs, shrink, genmap in [ ( "basic_app_R8_shrink", ["proguard.cfg"], True, + False, ), ( "basic_app_R8_no_shrink", ["proguard.cfg"], False, + False, + ), + ( + "basic_app_no_R8", + [], + False, + False, + ), + ( + "basic_app_select_R8_genmap", + select({ + ":is_c_opt": ["proguard.cfg"], + "//conditions:default": [], + }), + True, + True, ), - ("basic_app_no_R8", [], False), ] ] @@ -58,3 +75,10 @@ android_library( manifest = "AndroidManifest_lib.xml", proguard_specs = ["lib2_proguard.cfg"], ) + +config_setting( + name = "is_c_opt", + values = { + "compilation_mode": "opt", + }, +) diff --git a/test/rules/android_binary/r8_integration/r8_integration_test.py b/test/rules/android_binary/r8_integration/r8_integration_test.py index e10c55cf7..7b507fd5f 100755 --- a/test/rules/android_binary/r8_integration/r8_integration_test.py +++ b/test/rules/android_binary/r8_integration/r8_integration_test.py @@ -81,6 +81,14 @@ def test_r8_integration(self): expect_unused_activity_class=False, ) + # No R8 when run in default test mode (non-opt), + # so unused resources and unused classes should be in the app + self._r8_integration_check( + "basic_app_select_R8_genmap.apk", + expect_unused_activity_resource=True, + expect_unused_activity_class=True, + ) + if __name__ == "__main__": dexdump = sys.argv.pop()