背景一、
? ? 今天編譯android 9.0 的apk 出現(xiàn)?
[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.
二膝捞、分析過(guò)程
查下了這兩個(gè)屬性泽疆,?Must specify LOCAL_SDK_VERSION or LOCAL_PRIVATE_PLATFORM_APIS,
發(fā)現(xiàn)android 9.0 會(huì)在這個(gè)目錄下去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 中添加這兩個(gè)變量中的一個(gè)
LOCAL_SDK_VERSION 和?LOCAL_PRIVATE_PLATFORM_APIS递览。
如果這兩個(gè)變量沒(méi)有定義执虹,那么編譯的時(shí)候就會(huì)報(bào)錯(cuò):
三捕透、
注意:
這兩個(gè)變量必須定義其中一個(gè)
除非該LOCAL_MODULE 在白名單中(一般不會(huì)去修改源生的 mk)
這兩個(gè)變量只能定義一個(gè),不能同時(shí)定義
對(duì)于變量LOCAL_SDK_VERSION 之前一直會(huì)使用撑瞧,標(biāo)記SDK 的version 狀態(tài)棵譬,值為current system_current test_current core_current 其中一個(gè)。
對(duì)于使用系統(tǒng)@hide api的预伺,我們默認(rèn)可以設(shè)置?LOCAL_PRIVATE_PLATFORM_APIS 為true即可订咸。
四、對(duì)于我們的報(bào)錯(cuò)
可以修改這個(gè)值
LOCAL_PRIVATE_PLATFORM_APIS := current
五酬诀、搞定脏嚷。