diff --git a/rules/android_binary/attrs.bzl b/rules/android_binary/attrs.bzl index a033efdc6..d69e023d3 100644 --- a/rules/android_binary/attrs.bzl +++ b/rules/android_binary/attrs.bzl @@ -243,6 +243,10 @@ ATTRS = _attrs.replace( Allow for the optimizer to process resources. This is not supported in proguard. """, ), + _enable_debuggable_from_manifest_values = attr.label( + default = "//rules/flags:enable_debuggable_from_manifest_values", + doc = "Enables setting 'debuggable' of the app from android_binary#manifest_values.", + ), ), _attrs.compilation_attributes(apply_android_transition = True), _attrs.DATA_CONTEXT, diff --git a/rules/android_library/attrs.bzl b/rules/android_library/attrs.bzl index e766657fa..df593eb2f 100644 --- a/rules/android_library/attrs.bzl +++ b/rules/android_library/attrs.bzl @@ -239,6 +239,10 @@ ATTRS = _attrs.add( _aidl_lib = attr.label( default = Label("//rules:aidl_lib"), ), + _enable_debuggable_from_manifest_values = attr.label( + default = "//rules/flags:enable_debuggable_from_manifest_values", + doc = "Enables setting 'debuggable' of the app from android_binary#manifest_values.", + ), ), _attrs.compilation_attributes(), _attrs.DATA_CONTEXT, diff --git a/rules/android_local_test/attrs.bzl b/rules/android_local_test/attrs.bzl index 37a8fb3eb..6bc7b7862 100644 --- a/rules/android_local_test/attrs.bzl +++ b/rules/android_local_test/attrs.bzl @@ -226,6 +226,10 @@ def make_attrs(additional_aspects = [], native_libs_transition = None): _manifest_merge_order = attr.label( default = "//rules/flags:manifest_merge_order", ), + _enable_debuggable_from_manifest_values = attr.label( + default = "//rules/flags:enable_debuggable_from_manifest_values", + doc = "Enables setting 'debuggable' of the app from android_binary#manifest_values.", + ), ), _attrs.compilation_attributes(), _attrs.DATA_CONTEXT, diff --git a/rules/flags/additional_flags.bzl b/rules/flags/additional_flags.bzl index 687ff9f00..619bb39d9 100644 --- a/rules/flags/additional_flags.bzl +++ b/rules/flags/additional_flags.bzl @@ -13,7 +13,7 @@ # limitations under the License. """Additional flag definitions.""" -load("@bazel_skylib//rules:common_settings.bzl", "string_flag") +load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag") def additional_flags(): @@ -28,4 +28,11 @@ def additional_flags(): "dependency", ], visibility = ["//visibility:public"], + ) + + # Enables setting 'debuggable' of the app from android_binary#manifest_values. + bool_flag( + name = "enable_debuggable_from_manifest_values", + build_setting_default = False, + visibility = ["//visibility:public"], ) \ No newline at end of file diff --git a/rules/flags/flag_defs.bzl b/rules/flags/flag_defs.bzl index a91bf0703..43f7e91bc 100644 --- a/rules/flags/flag_defs.bzl +++ b/rules/flags/flag_defs.bzl @@ -92,4 +92,4 @@ def define_flags(): name = "use_studio_deployer", default = True, description = "Use Studio Deployer to install apks", - ) + ) \ No newline at end of file diff --git a/rules/flags/flags.bzl b/rules/flags/flags.bzl index 0a3120e8f..b9bea55b6 100644 --- a/rules/flags/flags.bzl +++ b/rules/flags/flags.bzl @@ -90,12 +90,7 @@ def native_bool_flag_macro(name, description): ) def _get_bool(v): - v = v.lower() - if v == "true": - return True - if v == "false": - return False - fail("Unknown bool: " + v) + return utils.get_bool(v) def _bool_impl(ctx): if ctx.label.name in ctx.var: diff --git a/rules/resources.bzl b/rules/resources.bzl index f7ae49f92..a8ddce2a6 100644 --- a/rules/resources.bzl +++ b/rules/resources.bzl @@ -735,6 +735,13 @@ def _package( resource_files_zip = ctx.actions.declare_file( "_migrated/" + ctx.label.name + "_files/resource_files.zip", ) + manifest_debuggable = utils.get_bool(manifest_values["debuggable"]) if "debuggable" in manifest_values else None + # By default, the debug flag passed to AAPT2 should be the inverse of the OPT flag (i.e. -c opt --> debug disabled) + aapt2_debug_mode = compilation_mode != _compilation_mode.OPT + # If the --@rules_android//rules/flags:enable_debuggable_from_manifest_values flag is passed, then get + # the AAPT2 debug flag value from the Bazel/Blaze command line. + if ctx.attr._enable_debuggable_from_manifest_values[BuildSettingInfo].value and manifest_debuggable != None: + aapt2_debug_mode = manifest_debuggable _busybox.package( ctx, out_file = resource_apk, @@ -773,7 +780,7 @@ def _package( aapt = aapt, busybox = busybox, host_javabase = host_javabase, - debug = compilation_mode != _compilation_mode.OPT, + debug = aapt2_debug_mode, should_throw_on_conflict = should_throw_on_conflict, ) @@ -1889,7 +1896,7 @@ def _shrink( r_txt = r_txt, shrunk_jar = shrunk_jar, proguard_mapping = proguard_mapping, - debug = _compilation_mode.get(ctx) != _compilation_mode.OPT, + manifest_debuggable = _compilation_mode.get(ctx) != _compilation_mode.OPT, busybox = busybox, host_javabase = host_javabase, ) @@ -1937,7 +1944,7 @@ def _convert_resources_to_apk( resources_zip = resources_zip, aapt = aapt, android_jar = android_jar, - debug = _compilation_mode.get(ctx) != _compilation_mode.OPT, + manifest_debuggable = _compilation_mode.get(ctx) != _compilation_mode.OPT, busybox = busybox, host_javabase = host_javabase, ) diff --git a/rules/utils.bzl b/rules/utils.bzl index d0f5b555d..251bbb64a 100644 --- a/rules/utils.bzl +++ b/rules/utils.bzl @@ -440,6 +440,14 @@ def _get_compilation_mode(ctx): """ return ctx.var["COMPILATION_MODE"] +def _get_bool(v): + v = v.lower() + if v == "true": + return True + if v == "false": + return False + fail("Unknown bool: " + v) + compilation_mode = struct( DBG = "dbg", FASTBUILD = "fastbuild", @@ -465,6 +473,7 @@ utils = struct( list_or_depset_to_list = _list_or_depset_to_list, add_cls_prefix = _add_cls_prefix, get_cls = _get_cls, + get_bool = _get_bool ) log = struct(