Android 12 ServiceMode编译报错:同时指定LOCAL_SDK_VERSION与LOCAL_PRIVATE_PLATFORM_APIS
我是一名Android固件开发者,基于Android 12源码开发名为ServiceMode的系统应用,需随Android系统编译并部署至system分区。编译时出现报错:
"Specifies both LOCAL_SDK_VERSION (system_current) and LOCAL_PRIVATE_PLATFORM_APIS (true) but should specify only one"
我在Android.mk中仅设置了LOCAL_PRIVATE_PLATFORM_APIS := true(因需使用隐藏API),未配置LOCAL_SDK_VERSION,却仍触发该报错。我的Android.mk文件内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES += $(call all-java-files-under, java/com/foo/example/servicemode) LOCAL_SRC_FILES += $(call all-java-files-under, java/com/bar) ifeq "$(LOCAL_REGION)" "JP" LOCAL_MANIFEST_FILE := java/com/foo/example/servicemodejp/AndroidManifest.xml LOCAL_SRC_FILES += $(call all-java-files-under, java/com/foo/example/servicemodejp) endif ifeq "$(PROJECT_SERIES)_$(LOCAL_REGION)" "US" LOCAL_MANIFEST_FILE := java/com/foo/example/servicemodeus/AndroidManifest.xml LOCAL_SRC_FILES += $(call all-java-files-under, java/com/foo/example/servicemodeus) endif LOCAL_PACKAGE_NAME := ServiceMode LOCAL_CERTIFICATE := platform LOCAL_ODM_MODULE := true LOCAL_JAVA_LIBRARIES := com.bar.twoworlds.mobile\ com.foo.example.mobileinput.provider.util \ ifeq "$(LOCAL_REGION)" "JP" LOCAL_JAVA_LIBRARIES += com.foo.example.jp endif LOCAL_STATIC_JAVA_LIBRARIES := \ com.foo.example.osdplanevisibilitymanager \ com.foo.example.provider.modelvariation.util \ com.foo.example.hardware.display-V1.0-java\ android-support-annotations ifeq "$(PROJECT_SERIES)_$(LOCAL_REGION)" "US" LOCAL_STATIC_JAVA_LIBRARIES += com.foo.example.mobileapi endif LOCAL_PROGUARD_ENABLED := disabled LOCAL_PRIVATE_PLATFORM_APIS := true LOCAL_DEX_PREOPT := false include $(BUILD_PACKAGE) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \ com.foo.example.osdplanevisibilitymanager:libs/com.foo.example.osdplanevisibilitymanager.jar ifeq "$(PROJECT_SERIES)_$(LOCAL_REGION)" "US" LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += com.foo.example.mobileapi:libs/mobileapi-1.13.0.jar endif include $(BUILD_MULTI_PREBUILT)
排查依赖模块的默认配置
你依赖的LOCAL_JAVA_LIBRARIES或LOCAL_STATIC_JAVA_LIBRARIES中,可能有模块已设置LOCAL_SDK_VERSION := system_current,编译系统会合并依赖的配置到当前模块,引发冲突。检查所有依赖库的Android.mk/Android.bp文件,若依赖的是系统库无法修改,可在当前模块显式添加LOCAL_SDK_VERSION := none覆盖继承配置。处理ODM模块的默认行为
Android 12中设置LOCAL_ODM_MODULE := true时,编译系统会自动为ODM模块默认配置LOCAL_SDK_VERSION := system_current,和你手动设置的LOCAL_PRIVATE_PLATFORM_APIS冲突。解决方法是在当前模块中显式添加LOCAL_SDK_VERSION := none,明确告知编译系统仅使用私有平台API,不启用SDK版本限制。具体修改操作
在你的Android.mk中,LOCAL_PRIVATE_PLATFORM_APIS := true上方添加一行:LOCAL_SDK_VERSION := none之后重新编译即可验证是否解决报错。
内容的提问来源于stack exchange,提问作者Shreyas R

