| # Copyright (C) 2023 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| load("@soong_injection//api_levels:platform_versions.bzl", "platform_versions") |
| load("//build/bazel/rules/common:api.bzl", "api", "api_from_product") |
| load(":manifest_fixer_internal.bzl", _internal = "manifest_fixer_internal") |
| |
| # TODO(b/300428335): access these variables in a transition friendly way. |
| _PLATFORM_SDK_VERSION = platform_versions.platform_sdk_version |
| _PLATFORM_SDK_CODENAME = platform_versions.platform_sdk_codename |
| _PLATFORM_VERSION_ACTIVE_CODENAMES = platform_versions.platform_version_active_codenames |
| |
| # Starlark implementation of TargetSdkVersionForManifestFixer from build/soong/java/android_manifest.go |
| def _target_sdk_version_for_manifest_fixer( |
| target_sdk_version, |
| platform_sdk_final, |
| has_unbundled_build_apps): |
| platform_sdk_variables = struct( |
| platform_sdk_final = platform_sdk_final, |
| platform_sdk_version = _PLATFORM_SDK_VERSION, |
| platform_sdk_codename = _PLATFORM_SDK_CODENAME, |
| platform_version_active_codenames = _PLATFORM_VERSION_ACTIVE_CODENAMES, |
| ) |
| return _internal.target_sdk_version_for_manifest_fixer( |
| target_sdk_version = target_sdk_version, |
| has_unbundled_build_apps = has_unbundled_build_apps, |
| platform_sdk_variables = platform_sdk_variables, |
| ) |
| |
| # TODO: b/301430823 - Only pass ctx.actions to limit the scope of what this function can access. |
| def _fix( |
| ctx, |
| manifest_fixer, |
| in_manifest, |
| out_manifest, |
| mnemonic = "FixAndroidManifest", |
| test_only = None, |
| min_sdk_version = None, |
| target_sdk_version = None): |
| args = ctx.actions.args() |
| if test_only: |
| args.add("--test-only") |
| if min_sdk_version: |
| args.add("--minSdkVersion", min_sdk_version) |
| if target_sdk_version: |
| args.add("--targetSdkVersion", target_sdk_version) |
| if min_sdk_version or target_sdk_version: |
| args.add("--raise-min-sdk-version") |
| args.add(in_manifest) |
| args.add(out_manifest) |
| ctx.actions.run( |
| inputs = [in_manifest], |
| outputs = [out_manifest], |
| executable = manifest_fixer, |
| arguments = [args], |
| mnemonic = mnemonic, |
| ) |
| |
| manifest_fixer = struct( |
| fix = _fix, |
| target_sdk_version_for_manifest_fixer = _target_sdk_version_for_manifest_fixer, |
| ) |