Remove validation that checks for minSdkVersion 21+ when native multidex is enabled PiperOrigin-RevId: 644419565 Change-Id: I617ab8fa2a09d1e2b24b907cb9d9630f4d1e0444
diff --git a/rules/acls.bzl b/rules/acls.bzl index 19d723d..58f9766 100644 --- a/rules/acls.bzl +++ b/rules/acls.bzl
@@ -53,7 +53,6 @@ load("//rules/acls:android_library_use_aosp_aidl_compiler.bzl", "ANDROID_LIBRARY_USE_AOSP_AIDL_COMPILER_ALLOWLIST") load("//rules/acls:android_lint_checks_rollout.bzl", "ANDROID_LINT_CHECKS_FALLBACK", "ANDROID_LINT_CHECKS_ROLLOUT") load("//rules/acls:android_lint_rollout.bzl", "ANDROID_LINT_FALLBACK", "ANDROID_LINT_ROLLOUT") -load("//rules/acls:android_multidex_native_min_sdk_allowlist.bzl", "ANDROID_MULTIDEX_NATIVE_MIN_SDK_ALLOWLIST") load("//rules/acls:android_test_lockdown.bzl", "ANDROID_TEST_LOCKDOWN_GENERATOR_FUNCTIONS", "ANDROID_TEST_LOCKDOWN_TARGETS") load("//rules/acls:b122039567.bzl", "B122039567") load("//rules/acls:baseline_profiles_optimizer_integration.bzl", "BASELINE_PROFILES_OPTIMIZER_INTEGRATION", "BASELINE_PROFILES_OPTIMIZER_INTEGRATION_FALLBACK") @@ -198,9 +197,6 @@ def _in_android_binary_starlark_rollout(fqn): return matches(fqn, ANDROID_BINARY_STARLARK_ROLLOUT_DICT) and not matches(fqn, ANDROID_BINARY_STARLARK_FALLBACK_DICT) -def _in_android_binary_multidex_native_min_sdk_allowlist(fqn): - return matches(fqn, ANDROID_MULTIDEX_NATIVE_MIN_SDK_ALLOWLIST_DICT) - def _in_disable_optimizing_dexer(fqn): return matches(fqn, DISABLE_OPTIMIZING_DEXER_DICT) @@ -268,7 +264,6 @@ USE_R8_DICT = make_dict(USE_R8) ANDROID_BINARY_STARLARK_ROLLOUT_DICT = make_dict(ANDROID_BINARY_STARLARK_ROLLOUT) ANDROID_BINARY_STARLARK_FALLBACK_DICT = make_dict(ANDROID_BINARY_STARLARK_FALLBACK) -ANDROID_MULTIDEX_NATIVE_MIN_SDK_ALLOWLIST_DICT = make_dict(ANDROID_MULTIDEX_NATIVE_MIN_SDK_ALLOWLIST) DISABLE_OPTIMIZING_DEXER_DICT = make_dict(DISABLE_OPTIMIZING_DEXER) def matches(fqn, dct): @@ -360,7 +355,6 @@ in_android_binary_resource_name_obfuscation_opt_out_allowlist = _in_android_binary_resource_name_obfuscation_opt_out_allowlist, in_allow_proguard_apply_mapping = _in_allow_proguard_apply_mapping, in_android_binary_starlark_rollout = _in_android_binary_starlark_rollout, - in_android_binary_multidex_native_min_sdk_allowlist = _in_android_binary_multidex_native_min_sdk_allowlist, use_r8 = _use_r8, in_disable_optimizing_dexer = _in_disable_optimizing_dexer, )
diff --git a/rules/android_binary_internal/impl.bzl b/rules/android_binary_internal/impl.bzl index 43ac1d4..0f2c054 100644 --- a/rules/android_binary_internal/impl.bzl +++ b/rules/android_binary_internal/impl.bzl
@@ -139,9 +139,6 @@ manifest_validation_output = _resources.validate_manifest( ctx, manifest = packaged_resources_ctx.processed_manifest, - should_validate_multidex = - ctx.attr.multidex == "native" and - not acls.in_android_binary_multidex_native_min_sdk_allowlist(str(ctx.label)), min_sdk_version = ctx.attr.min_sdk_version, manifest_validation_tool = get_android_toolchain(ctx).manifest_validation_tool.files_to_run, toolchain_type = ANDROID_TOOLCHAIN_TYPE,
diff --git a/rules/resources.bzl b/rules/resources.bzl index e35ba61..b0c413a 100644 --- a/rules/resources.bzl +++ b/rules/resources.bzl
@@ -1236,7 +1236,6 @@ def _validate_manifest( ctx, manifest, - should_validate_multidex = True, min_sdk_version = 0, manifest_validation_tool = None, toolchain_type = None): @@ -1245,14 +1244,13 @@ Args: ctx: The rules context. manifest: File. The AndroidManifest.xml file. - should_validate_multidex: Boolean. Whether to validate minSdkVersion for multidex. min_sdk_version: Int. The expected minSdkVersion value in the manifest. manifest_validation_tool: FilesToRunProvider. The manifest validation tool executable. toolchain_type: The Android Toolchain. Returns: A file containing the log of validation results, or None if validation not performed. """ - if (not should_validate_multidex and min_sdk_version <= 0) or not manifest_validation_tool: + if (min_sdk_version <= 0) or not manifest_validation_tool: return None output = ctx.actions.declare_file(ctx.label.name + "_manifest_validation_output") @@ -1260,7 +1258,6 @@ args = ctx.actions.args() args.add("--manifest", manifest) args.add("--output", output) - args.add("--validate_multidex=%s" % should_validate_multidex) args.add("--expected_min_sdk_version", min_sdk_version) ctx.actions.run(
diff --git a/src/validations/validate_manifest/validate_manifest.py b/src/validations/validate_manifest/validate_manifest.py index 41bc61b..d3f2c6d 100644 --- a/src/validations/validate_manifest/validate_manifest.py +++ b/src/validations/validate_manifest/validate_manifest.py
@@ -23,15 +23,11 @@ 'Path to manifest.xml to validate.') _OUTPUT = flags.DEFINE_string('output', None, 'Output file for validation action.') -_VALIDATE_MULTIDEX_MINSDK = flags.DEFINE_boolean( - 'validate_multidex', True, 'Whether to validate minSdkVersion for multidex') _EXPECTED_MIN_SDK = flags.DEFINE_integer('expected_min_sdk_version', 0, 'Expected minSdkVersion in manifest.') _MIN_SDK_VERSION = 'android:minSdkVersion' -_LOLLIPOP_SDK_VERSION = 21 - def _GetMinSdkVersion(manifest): dom = xml.dom.minidom.parseString(manifest) @@ -47,44 +43,19 @@ return None -def ValidateManifestMinSdkVersionForNativeMultidex(manifest): - """Validates that an Android manifest's minSdkVersion supports native multidex. - - Args: - manifest: the XML manifest of the main APK as a string - - Returns: - The reason the manifest is invalid, or None. - """ - - min_sdk_version = _GetMinSdkVersion(manifest) - if not min_sdk_version: - return """ -Enabling multidex='native' is only supported on SDK version %d and newer; minSdkVersion is not set and defaults to 1. - -Use multidex='legacy' instead if support for earlier SDK versions is required - -""" % (_LOLLIPOP_SDK_VERSION) - min_sdk_version = _TryParseInt(min_sdk_version) - if not min_sdk_version: - return None - if min_sdk_version < _LOLLIPOP_SDK_VERSION: - return """ -Enabling multidex='native' is only supported on SDK version %d and newer; minSdkVersion is set to %d. - -Use multidex='legacy' instead if support for earlier SDK versions is required - -""" % (_LOLLIPOP_SDK_VERSION, min_sdk_version) - return None - - def ValidateManifestMinSdk(manifest, expected_min_sdk): - min_sdk_version = _TryParseInt(_GetMinSdkVersion(manifest)) + min_sdk_version_string = _GetMinSdkVersion(manifest) + if not min_sdk_version_string: + return """ +Expected manifest minSdkVersion of %s but no minSdkVersion was set + +""" % expected_min_sdk + min_sdk_version = _TryParseInt(min_sdk_version_string) if min_sdk_version != expected_min_sdk: return """ - Expected manifest minSdkVersion of %s but got %s +Expected manifest minSdkVersion of %s but got %s - """ % (expected_min_sdk, min_sdk_version) +""" % (expected_min_sdk, min_sdk_version) def main(argv): @@ -94,12 +65,6 @@ with open(_MANIFEST.value, 'rb') as manifest_file: manifest = manifest_file.read() - if _VALIDATE_MULTIDEX_MINSDK.value: - error = ValidateManifestMinSdkVersionForNativeMultidex(manifest) - if error: - sys.stderr.write(error) - sys.exit(1) - if _EXPECTED_MIN_SDK.value: error = ValidateManifestMinSdk(manifest, _EXPECTED_MIN_SDK.value) if error:
diff --git a/src/validations/validate_manifest/validate_manifest_test.py b/src/validations/validate_manifest/validate_manifest_test.py index c72997f..7540d92 100644 --- a/src/validations/validate_manifest/validate_manifest_test.py +++ b/src/validations/validate_manifest/validate_manifest_test.py
@@ -36,15 +36,6 @@ </manifest> """ -MANIFEST_NO_USES_SDK = """<?xml version='1.0' encoding='utf-8'?> -<manifest - xmlns:android="http://schemas.android.com/apk/res/android" - package="com.google.android.apps.testapp" - android:versionCode="70" - android:versionName="1.0"> -</manifest> -""" - BAD_MANIFEST = """<?xml version='1.0' encoding='utf-8'?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" @@ -56,9 +47,18 @@ """ NO_MIN_SDK_ERROR = """ -Enabling multidex='native' is only supported on SDK version 21 and newer; minSdkVersion is not set and defaults to 1. +Expected manifest minSdkVersion of 21 but no minSdkVersion was set -Use multidex='legacy' instead if support for earlier SDK versions is required +""" + + +MIN_SDK_TOO_LOW_ERROR = """ +Expected manifest minSdkVersion of 21 but got 10 + +""" + +MIN_SDK_BAD_ERROR = """ +Expected manifest minSdkVersion of 21 but got None """ @@ -67,27 +67,27 @@ def test_no_min_sdk(self): self.assertEqual( - validate_manifest.ValidateManifestMinSdkVersionForNativeMultidex( - MANIFEST_NO_MIN_SDK), NO_MIN_SDK_ERROR) + validate_manifest.ValidateManifestMinSdk(MANIFEST_NO_MIN_SDK, 21), + NO_MIN_SDK_ERROR, + ) + + def test_too_low_min_sdk(self): self.assertEqual( - validate_manifest.ValidateManifestMinSdkVersionForNativeMultidex( - MANIFEST_NO_USES_SDK), NO_MIN_SDK_ERROR) + validate_manifest.ValidateManifestMinSdk(MANIFEST, 21), + MIN_SDK_TOO_LOW_ERROR, + ) - def test_give_me_a_name(self): + def test_bad_min_sdk(self): self.assertEqual( - validate_manifest.ValidateManifestMinSdkVersionForNativeMultidex( - MANIFEST), """ -Enabling multidex='native' is only supported on SDK version 21 and newer; minSdkVersion is set to 10. - -Use multidex='legacy' instead if support for earlier SDK versions is required - -""") + validate_manifest.ValidateManifestMinSdk(BAD_MANIFEST, 21), + MIN_SDK_BAD_ERROR, + ) def test_negative(self): self.assertIsNone( - validate_manifest.ValidateManifestMinSdkVersionForNativeMultidex( - BAD_MANIFEST), None) + validate_manifest.ValidateManifestMinSdk(MANIFEST, 10), None + ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main()