背景一、
? ? 今天编译android 9.0 的apk 出现?
[1039/1081] including vendor/rockchip/common/apps/RkExplorer/Android.mk ...
vendor/rockchip/common/apps/RkExplorer/Android.mk: error: RkExplorer: Must specify LOCAL_SDK_VERSION or LOCAL_PRIVATE_PLATFORM_APIS,
build/make/core/sdk_check.mk:21: error: done.
二、分析过程
查下了这两个属性,?Must specify LOCAL_SDK_VERSION or LOCAL_PRIVATE_PLATFORM_APIS,
发现android 9.0 会在这个目录下去check?
build/make/core/sdk_check.mk
# Enforcement checks that LOCAL_SDK_VERSION and LOCAL_PRIVATE_PLATFORM_APIS are
# set correctly.
# Should be included by java targets that allow specifying LOCAL_SDK_VERSION.
# The JAVA_SDK_ENFORCEMENT_WARNING and JAVA_SDK_ENFORCEMENT_ERROR variables may
# be set to a particular module class to enable warnings and errors for that
# subtype.
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
需要在android.mk 中添加这两个变量中的一个
LOCAL_SDK_VERSION 和?LOCAL_PRIVATE_PLATFORM_APIS。
如果这两个变量没有定义,那么编译的时候就会报错:
三、
注意:
这两个变量必须定义其中一个
除非该LOCAL_MODULE 在白名单中(一般不会去修改源生的 mk)
这两个变量只能定义一个,不能同时定义
对于变量LOCAL_SDK_VERSION 之前一直会使用,标记SDK 的version 状态,值为current system_current test_current core_current 其中一个。
对于使用系统@hide api的,我们默认可以设置?LOCAL_PRIVATE_PLATFORM_APIS 为true即可。
四、对于我们的报错
可以修改这个值
LOCAL_PRIVATE_PLATFORM_APIS := current
五、搞定。