Migrate android flags

--experimental_incremental_dexing_after_proguard
--dexopts_supported_in_dexsharder
--android_fixed_resource_neverlinking
--android_resource_shrinking
--experimental_android_resource_path_shortening
--experimental_android_resource_name_obfuscation

#FLAG_CHANGE

PiperOrigin-RevId: 952087005
Change-Id: I48b8e853905e6e3fabf3a98689e0ea96f4fa1771
diff --git a/flags/BUILD b/flags/BUILD
index e6f363b..5c71bf6 100644
--- a/flags/BUILD
+++ b/flags/BUILD
@@ -73,6 +73,13 @@
     visibility = ["//visibility:public"],
 )
 
+bool_flag(
+    name = "experimental_android_resource_name_obfuscation",
+    build_setting_default = False,
+    scope = "universal",
+    visibility = ["//visibility:public"],
+)
+
 string_flag(
     name = "android_manifest_merger_order",
     build_setting_default = "alphabetical",
@@ -93,7 +100,7 @@
 )
 
 bool_flag(
-    name = "android_fixed_resource_neverlinking",
+    name = "fixed_resource_neverlinking",
     build_setting_default = True,
     visibility = ["//visibility:public"],
 )
@@ -137,16 +144,6 @@
 )
 
 string_list_flag(
-    name = "dexopts_supported_in_dexmerger",
-    build_setting_default = [
-        "--minimal-main-dex",
-        "--set-max-idx-number",
-    ],
-    scope = "universal",
-    visibility = ["//visibility:public"],
-)
-
-string_list_flag(
     name = "dexopts_supported_in_dexsharder",
     build_setting_default = ["--minimal-main-dex"],
     scope = "universal",
@@ -200,7 +197,7 @@
 )
 
 int_flag(
-    name = "incremental_dexing_after_proguard",
+    name = "experimental_incremental_dexing_after_proguard",
     build_setting_default = 50,
     scope = "universal",
     visibility = ["//visibility:public"],
diff --git a/rules/aar_import/attrs.bzl b/rules/aar_import/attrs.bzl
index 0494249..1d0b8b0 100644
--- a/rules/aar_import/attrs.bzl
+++ b/rules/aar_import/attrs.bzl
@@ -91,4 +91,5 @@
     _attrs.DATA_CONTEXT,
     _attrs.ANDROID_TOOLCHAIN_ATTRS,
     _attrs.AUTOMATIC_EXEC_GROUPS_ENABLED,
+    _attrs.FLAGS_ATTRS,
 )
diff --git a/rules/android_binary/impl.bzl b/rules/android_binary/impl.bzl
index 44b3a97..530154d 100644
--- a/rules/android_binary/impl.bzl
+++ b/rules/android_binary/impl.bzl
@@ -105,7 +105,7 @@
         java_package = java_package,
         compilation_mode = compilation_mode.get(ctx),
         shrink_resources = ctx.attr.shrink_resources,
-        use_android_resource_shrinking = ctx.fragments.android.use_android_resource_shrinking,
+        use_android_resource_shrinking = read_possibly_native_flag(ctx, "android_resource_shrinking"),
         use_android_resource_cycle_shrinking = ctx.fragments.android.use_android_resource_cycle_shrinking,
         use_legacy_manifest_merger = use_legacy_manifest_merger(ctx),
         should_throw_on_conflict = not acls.in_allow_resource_conflicts(str(ctx.label)),
@@ -315,7 +315,7 @@
         force_incremental_dexing = ctx.attr.incremental_dexing,
         has_forbidden_dexopts = len([d for d in ctx.attr.dexopts if d in forbidden_dexopts]) > 0,
         is_binary_optimized = is_binary_optimized,
-        incremental_dexing_shards_after_proguard = ctx.fragments.android.incremental_dexing_shards_after_proguard,
+        incremental_dexing_shards_after_proguard = read_possibly_native_flag(ctx, "experimental_incremental_dexing_after_proguard"),
     )
 
     classes_dex_zip = _dex.get_dx_artifact(ctx, "classes.dex.zip")
@@ -736,7 +736,7 @@
     has_proguard_specs = bool(ctx.files.proguard_specs)
     enable_resource_shrinking = _resources.is_resource_shrinking_enabled(
         ctx.attr.shrink_resources,
-        ctx.fragments.android.use_android_resource_shrinking,
+        read_possibly_native_flag(ctx, "android_resource_shrinking"),
         has_proguard_specs,
     )
     resource_shrinking_in_optimizer = acls.in_resource_shrinking_in_optimizer(str(ctx.label)) and _resources.is_resource_name_obfuscation_enabled(ctx, enable_resource_shrinking)
diff --git a/rules/android_binary/r8.bzl b/rules/android_binary/r8.bzl
index 4c63947..df658eb 100644
--- a/rules/android_binary/r8.bzl
+++ b/rules/android_binary/r8.bzl
@@ -212,7 +212,7 @@
     if (not acls.use_r8(str(ctx.label)) or
         not _resources.is_resource_shrinking_enabled(
             ctx.attr.shrink_resources,
-            ctx.fragments.android.use_android_resource_shrinking,
+            read_possibly_native_flag(ctx, "android_resource_shrinking"),
             bool(ctx.files.proguard_specs),
         )):
         return ProviderInfo(
diff --git a/rules/android_library/attrs.bzl b/rules/android_library/attrs.bzl
index 00e0213..61b368b 100644
--- a/rules/android_library/attrs.bzl
+++ b/rules/android_library/attrs.bzl
@@ -248,4 +248,5 @@
     _attrs.DATA_CONTEXT,
     _attrs.ANDROID_TOOLCHAIN_ATTRS,
     _attrs.AUTOMATIC_EXEC_GROUPS_ENABLED,
+    _attrs.FLAGS_ATTRS,
 )
diff --git a/rules/android_local_test/attrs.bzl b/rules/android_local_test/attrs.bzl
index 684f27c..c8b9aa2 100644
--- a/rules/android_local_test/attrs.bzl
+++ b/rules/android_local_test/attrs.bzl
@@ -229,6 +229,7 @@
         _attrs.compilation_attributes(),
         _attrs.DATA_CONTEXT,
         _attrs.AUTOMATIC_EXEC_GROUPS_ENABLED,
+        _attrs.FLAGS_ATTRS,
     )
 
 ATTRS = make_attrs()
diff --git a/rules/dex.bzl b/rules/dex.bzl
index 9d82101..cb05fd2 100644
--- a/rules/dex.bzl
+++ b/rules/dex.bzl
@@ -126,11 +126,11 @@
             needs_normalization = not should_optimize_dex,
         )
         java_resource_jar = ctx.actions.declare_file(ctx.label.name + "_files/java_resources.jar")
-        if ctx.fragments.android.incremental_dexing_shards_after_proguard > 1:
+        if read_possibly_native_flag(ctx, "experimental_incremental_dexing_after_proguard") > 1:
             dex_archives, globals_shards = _shard_proguarded_jar_and_dex(
                 ctx,
                 java_resource_jar = java_resource_jar,
-                num_shards = ctx.fragments.android.incremental_dexing_shards_after_proguard,
+                num_shards = read_possibly_native_flag(ctx, "experimental_incremental_dexing_after_proguard"),
                 dexopts = toplevel_dexbuilder_dexopts,
                 proguarded_jar = proguarded_jar,
                 min_sdk_version = min_sdk_version,
@@ -192,7 +192,7 @@
             ctx,
             output = shards,
             inputs = dex_archives,
-            dexopts = _filter_dexopts(dexopts, ctx.fragments.android.get_dexopts_supported_in_dex_sharder),
+            dexopts = _filter_dexopts(dexopts, read_possibly_native_flag(ctx, "dexopts_supported_in_dexsharder")),
             inclusion_filter_jar = inclusion_filter_jar,
             dexsharder = dexsharder,
             toolchain_type = toolchain_type,
diff --git a/rules/flags/flags.bzl b/rules/flags/flags.bzl
index 70f8770..208b898 100644
--- a/rules/flags/flags.bzl
+++ b/rules/flags/flags.bzl
@@ -190,27 +190,33 @@
     return flags[0][FlagsInfo]
 
 _POSSIBLY_NATIVE_FLAGS = {
-    "desugar_java8_libs": (lambda ctx: ctx.fragments.android.desugar_java8_libs, "starlark"),
+    "desugar_java8_libs": (lambda ctx: ctx.fragments.android.desugar_java8_libs, "native"),
     "experimental_android_compress_java_resources": (
         lambda ctx: ctx.fragments.android.compress_java_resources,
-        "starlark",
+        "native",
     ),
     "internal_persistent_android_dex_desugar": (
         lambda ctx: ctx.fragments.android.persistent_android_dex_desugar,
-        "starlark",
+        "native",
     ),
     "internal_persistent_busybox_tools": (
         lambda ctx: ctx.fragments.android.persistent_busybox_tools,
-        "starlark",
+        "native",
     ),
     "internal_persistent_multiplex_android_dex_desugar": (
         lambda ctx: ctx.fragments.android.persistent_multiplex_android_dex_desugar,
-        "starlark",
+        "native",
     ),
     "internal_persistent_multiplex_busybox_tools": (
         lambda ctx: ctx.fragments.android.persistent_multiplex_busybox_tools,
-        "starlark",
+        "native",
     ),
+    "experimental_incremental_dexing_after_proguard": (lambda ctx: ctx.fragments.android.incremental_dexing_shards_after_proguard, "native"),
+    "dexopts_supported_in_dexsharder": (lambda ctx: ctx.fragments.android.get_dexopts_supported_in_dex_sharder, "native"),
+    "fixed_resource_neverlinking": (lambda ctx: ctx.fragments.android.fixed_resource_neverlinking, "native"),
+    "android_resource_shrinking": (lambda ctx: ctx.fragments.android.use_android_resource_shrinking, "native"),
+    "experimental_android_resource_path_shortening": (lambda ctx: ctx.fragments.android.use_android_resource_path_shortening, "native"),
+    "experimental_android_resource_name_obfuscation": (lambda ctx: ctx.fragments.android.use_android_resource_name_obfuscation, "native"),
 }
 
 def read_possibly_native_flag(ctx, flag_name):
@@ -247,6 +253,7 @@
         # First check the new wrapped_flags attribute
         if hasattr(ctx.attr, "_wrapped_flags") and ctx.attr._wrapped_flags:
             wrapped_flags = ctx.attr._wrapped_flags[WrappedFlagsInfo].flags
+
             if flag_name in wrapped_flags:
                 return wrapped_flags[flag_name].value
         elif hasattr(ctx.fragments, "android"):
diff --git a/rules/resources.bzl b/rules/resources.bzl
index 3072d1c..fa4e37a 100644
--- a/rules/resources.bzl
+++ b/rules/resources.bzl
@@ -18,6 +18,7 @@
 load("//rules:add_constraints.bzl", "add_constraints")
 load("//rules:min_sdk_version.bzl", _min_sdk_version = "min_sdk_version")
 load("//rules:visibility.bzl", "PROJECT_VISIBILITY")
+load("//rules/flags:flags.bzl", "read_possibly_native_flag")
 load("@rules_java//java/common:java_info.bzl", "JavaInfo")
 load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")
 load(":attrs.bzl", _attrs = "attrs")
@@ -1254,7 +1255,7 @@
     resources_neverlink = (
         neverlink and (
             defines_resources or
-            ctx.fragments.android.fixed_resource_neverlinking
+            read_possibly_native_flag(ctx, "fixed_resource_neverlinking")
         )
     )
 
@@ -1931,12 +1932,12 @@
     return _ResourcesOptimizeContextInfo(**optimize_ctx)
 
 def _is_resource_path_shortening_enabled(ctx):
-    return ctx.fragments.android.use_android_resource_path_shortening and \
+    return read_possibly_native_flag(ctx, "experimental_android_resource_path_shortening") and \
            _compilation_mode.get(ctx) == _compilation_mode.OPT and \
            not acls.in_android_binary_raw_access_to_resource_paths_allowlist(str(ctx.label))
 
 def _is_resource_name_obfuscation_enabled(ctx, is_resource_shrunk):
-    return (ctx.fragments.android.use_android_resource_name_obfuscation or
+    return (read_possibly_native_flag(ctx, "experimental_android_resource_name_obfuscation") or
             _FEATURE_RESOURCE_NAME_OBFUSCATION in ctx.features) and \
            is_resource_shrunk and \
            not acls.in_android_binary_resource_name_obfuscation_opt_out_allowlist(str(ctx.label))
diff --git a/test/rules/resources/test.bzl b/test/rules/resources/test.bzl
index b4413b0..f85fdf2 100644
--- a/test/rules/resources/test.bzl
+++ b/test/rules/resources/test.bzl
@@ -13,6 +13,7 @@
 # limitations under the License.
 """Test rule for resource processing."""
 
+load("//flags:flags_wrapper.bzl", "WrappedFlagsInfo")
 load("//providers:providers.bzl", "StarlarkAndroidResourcesInfo")
 load("//rules:attrs.bzl", "ANDROID_BINARY_ATTRS")
 load("//rules:common.bzl", _common = "common")
@@ -126,6 +127,10 @@
         _manifest_merge_order = attr.label(
             default = "//rules/flags:manifest_merge_order",
         ),
+        _wrapped_flags = attr.label(
+            default = Label("//flags:flags_wrapper"),
+            providers = [WrappedFlagsInfo],
+        ),
         use_xsltproc = attr.bool(default = True),
         use_instrument_xslt = attr.bool(default = True),
     ),