migrate apk_signing_method #FLAG_CHANGE PiperOrigin-RevId: 954036916 Change-Id: Ib8b3c209b7f23c679f4e8ba59adcdaea396f8412
diff --git a/flags/BUILD b/flags/BUILD index 5c71bf6..db3d058 100644 --- a/flags/BUILD +++ b/flags/BUILD
@@ -203,6 +203,19 @@ visibility = ["//visibility:public"], ) +string_flag( + name = "apk_signing_method", + build_setting_default = "v1_v2", + scope = "universal", + values = [ + "v1", + "v1_v2", + "v2", + "v4", + ], + visibility = ["//visibility:public"], +) + flags_wrapper_macro( name = "flags_wrapper", )
diff --git a/rules/apk_packaging.bzl b/rules/apk_packaging.bzl index cf4ba03..e772207 100644 --- a/rules/apk_packaging.bzl +++ b/rules/apk_packaging.bzl
@@ -13,6 +13,7 @@ # limitations under the License. """Defines Bazel Apk processing methods for Android rules.""" +load("//flags:flags_wrapper.bzl", "WrappedFlagsInfo") load("//providers:providers.bzl", "ApkInfo") load("//rules:visibility.bzl", "PROJECT_VISIBILITY") load(":java.bzl", "java") @@ -34,6 +35,18 @@ }, ) +def _signing_scheme_enabled(ctx, schema_version): + """Determines whether v1, v2, or v4 APK signing is enabled.""" + method = ctx.attr._wrapped_flags[WrappedFlagsInfo].flags["apk_signing_method"].value + if schema_version == "v1": + return "v1" in method + elif schema_version == "v2": + return "v2" in method + elif schema_version == "v4": + return True if method == "v4" else None + + fail("Unknown schema in apk signer.") + def _process( ctx, unsigned_apk, @@ -130,7 +143,7 @@ ) v4_signature_file = None - if ctx.fragments.android.apk_signing_method_v4: + if _signing_scheme_enabled(ctx, "v4"): v4_signature_file = ctx.actions.declare_file(signed_apk.basename + ".idsig") apk_packaging_ctx[_IMPLICIT_OUTPUTS].append(v4_signature_file) @@ -361,14 +374,15 @@ args.add("--ks", signing_keys[i]) args.add("--ks-pass", "pass:android") - args.add("--v1-signing-enabled", ctx.fragments.android.apk_signing_method_v1) + args.add("--v1-signing-enabled", _signing_scheme_enabled(ctx, "v1")) args.add("--v1-signer-name", "CERT") - args.add("--v2-signing-enabled", ctx.fragments.android.apk_signing_method_v2) + args.add("--v2-signing-enabled", _signing_scheme_enabled(ctx, "v2")) # If the v4 flag is unset, it should not be passed to apk signer. This extra level of control is # needed to support environments where older build tools may be used. - if ctx.fragments.android.apk_signing_method_v4 != None: - args.add("--v4-signing-enabled", ctx.fragments.android.apk_signing_method_v4) + v4_enabled = _signing_scheme_enabled(ctx, "v4") + if v4_enabled != None: + args.add("--v4-signing-enabled", v4_enabled) if v4_signature_file: outputs.append(v4_signature_file)