1# 2# Copyright (C) 2018 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16 17ifdef BOARD_SYSTEMSDK_VERSIONS 18 # Apps and jars in vendor, product or odm partition are forced to build against System SDK. 19 _cannot_use_platform_apis := 20 ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_PROPRIETARY_MODULE))) 21 # Note: no need to check LOCAL_MODULE_PATH* since LOCAL_[VENDOR|ODM|OEM]_MODULE is already 22 # set correctly before this is included. 23 _cannot_use_platform_apis := true 24 else ifeq ($(LOCAL_PRODUCT_MODULE),true) 25 ifeq ($(PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE),true) 26 _cannot_use_platform_apis := true 27 endif 28 endif 29 ifneq (,$(filter JAVA_LIBRARIES APPS,$(LOCAL_MODULE_CLASS))) 30 ifndef LOCAL_SDK_VERSION 31 ifeq ($(_cannot_use_platform_apis),true) 32 ifeq (,$(LOCAL_IS_RUNTIME_RESOURCE_OVERLAY)) 33 # Runtime resource overlays are exempted from building against System SDK. 34 # TODO(b/155027019): remove this, after no product/vendor apps rely on this behavior. 35 LOCAL_SDK_VERSION := system_current 36 # We have run below again since LOCAL_SDK_VERSION is newly set and the "_current" 37 # may have to be updated 38 include $(BUILD_SYSTEM)/local_current_sdk.mk 39 endif 40 endif 41 endif 42 endif 43endif 44 45# Ensure that the selected System SDK version is one of the supported versions. 46# The range of support versions becomes narrower when BOARD_SYSTEMSDK_VERSIONS 47# is set, which is a subset of PLATFORM_SYSTEMSDK_VERSIONS. 48ifneq (,$(call has-system-sdk-version,$(LOCAL_SDK_VERSION))) 49 ifneq ($(_cannot_use_platform_apis),true) 50 # apps bundled in system partition can use all system sdk versions provided by the platform 51 _supported_systemsdk_versions := $(PLATFORM_SYSTEMSDK_VERSIONS) 52 else ifdef BOARD_SYSTEMSDK_VERSIONS 53 # When BOARD_SYSTEMSDK_VERSIONS is set, vendors apps are restricted to use those versions 54 # which is equal to or smaller than PLATFORM_SYSTEMSDK_VERSIONS 55 _supported_systemsdk_versions := $(BOARD_SYSTEMSDK_VERSIONS) 56 else 57 # If not, vendor apks are treated equally to system apps 58 _supported_systemsdk_versions := $(PLATFORM_SYSTEMSDK_VERSIONS) 59 endif 60 61 # b/314011075: apks and jars in the vendor or odm partitions cannot use system SDK 35 and beyond. 62 # This is to discourage the use of Java APIs in the partitions, which hasn't been supported since 63 # the beginning of the project Treble back in Android 10. Ultimately, we'd like to completely 64 # disallow any Java API in the partitions, but it shall be done progressively. 65 ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_PROPRIETARY_MODULE))) 66 # 28 is the API level when BOARD_SYSTEMSDK_VERSIONS was introduced. So, it's the oldset API 67 # we allow. 68 _supported_systemsdk_versions := $(call int_range_list, 28, 34) 69 endif 70 71 # Extract version number from LOCAL_SDK_VERSION (ex: system_34 -> 34) 72 _system_sdk_version := $(call get-numeric-sdk-version,$(LOCAL_SDK_VERSION)) 73 # However, the extraction may fail if it doesn't have any number (i.e. current, core_current, 74 # system_current, or similar) Then use the latest platform SDK version number or the actual 75 # codename. 76 ifeq (,$(_system_sdk_version) 77 ifeq (REL,$(PLATFORM_VERSION_CODENAME)) 78 _system_sdk_version := $(PLATFORM_SDK_VERSION) 79 else 80 _system_sdk_version := $(PLATFORM_VERSION_CODENAME) 81 endif 82 endif 83 84 ifneq ($(_system_sdk_version),$(filter $(_system_sdk_version),$(_supported_systemsdk_versions))) 85 ifneq (true,$(BUILD_BROKEN_DONT_CHECK_SYSTEMSDK) 86 $(call pretty-error,Incompatible LOCAL_SDK_VERSION '$(LOCAL_SDK_VERSION)'. \ 87 System SDK version '$(_system_sdk_version)' is not supported. Supported versions are: $(_supported_systemsdk_versions)) 88 endif 89 endif 90 _system_sdk_version := 91 _supported_systemsdk_versions := 92endif 93