前言:
对于这两个变量,虽然在之前就在编译系统中出现了,但是在Android P 中编译Java的时候多了一个check 步骤,即sdk_check.mk
先来看下java.mk:
在编译java 文件的时候都会进行check,来看下代码:
whitelisted_modules := framework-res__auto_generated_rro
ifeq (,$(JAVA_SDK_ENFORCEMENT_ERROR))
JAVA_SDK_ENFORCEMENT_ERROR := APPS
endif
ifeq ($(LOCAL_SDK_VERSION)$(LOCAL_PRIVATE_PLATFORM_APIS),)
ifeq (,$(filter $(LOCAL_MODULE),$(whitelisted_modules)))
ifneq ($(JAVA_SDK_ENFORCEMENT_WARNING)$(JAVA_SDK_ENFORCEMENT_ERROR),)
my_message := Must specify LOCAL_SDK_VERSION or LOCAL_PRIVATE_PLATFORM_APIS,
ifeq ($(LOCAL_MODULE_CLASS),$(JAVA_SDK_ENFORCEMENT_ERROR))
$(call pretty-error,$(my_message))
endif
ifeq ($(LOCAL_MODULE_CLASS),$(JAVA_SDK_ENFORCEMENT_WARNING))
$(call pretty-warning,$(my_message))
endif
my_message :=
endif
endif
else ifneq ($(LOCAL_SDK_VERSION),)
ifneq ($(LOCAL_PRIVATE_PLATFORM_APIS),)
my_message := Specifies both LOCAL_SDK_VERSION ($(LOCAL_SDK_VERSION)) and
my_message += LOCAL_PRIVATE_PLATFORM_APIS ($(LOCAL_PRIVATE_PLATFORM_APIS))
my_message += but should specify only one
$(call pretty-error,$(my_message))
my_message :=
endif
endif
需要在编译的mk 中添加两个变量中的一个LOCAL_SDK_VERSION 和 LOCAL_PRIVATE_PLATFORM_APIS。
如果这两个变量没有定义,那么编译的时候就会报错:
[sshexec] vendor/commons/packages/apps/PhoneManager/Android.mk: error: PhoneManager: Must specify LOCAL_SDK_VERSION or LOCAL_PRIVATE_PLATFORM_APIS,
[sshexec] build/make/core/sdk_check.mk:21: error: done.
注意:
- 这两个变量必须定义其中一个
- 除非该LOCAL_MODULE 在白名单中(一般不会去修改源生的 mk)
- 这两个变量只能定义一个,不能同时定义
对于变量LOCAL_SDK_VERSION 之前一直会使用,标记SDK 的version 状态,值为current system_current test_current core_current 其中一个。
对于使用系统@hide api的,我们默认可以设置 LOCAL_PRIVATE_PLATFORM_APIS 为true即可。