Я разработчик прошивки Android, работаю с исходным кодом Android 12. У меня возникла проблема, когда я пытаюсь создать системное приложение под названием ServiceMode. Я пытаюсь собрать это приложение вместе со сборкой Android и переместить его в системный раздел.
Я получаю следующую ошибку сборки в написанном мной определении Android.mk: «Указывает как LOCAL_SDK_VERSION (system_current), так и LOCAL_PRIVATE_PLATFORM_APIS (true), но должен указывать только один»
В моем make-файле я упомянул только LOCAL_PRIVATE_PLATFORM_APIS := true, так как я использую скрытые API и не упомянул LOCAL_SDK_VERSION. Но все же я получаю сообщение об ошибке сборки о том, что в Android.mk упоминаются как LOCAL_SDK_VERSION, так и LOCAL_PRIVATE_PLATFORM_APIS.
Мой файл 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)
Приложения в разделах vendor/odm/product не могут использовать приватный API.
ifdef BOARD_SYSTEMSDK_VERSIONS
# Apps and jars in vendor, product or odm partition are forced to build against System SDK.
_cannot_use_platform_apis :=
ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_PROPRIETARY_MODULE)))
# Note: no need to check LOCAL_MODULE_PATH* since LOCAL_[VENDOR|ODM|OEM]_MODULE is already
# set correctly before this is included.
_cannot_use_platform_apis := true
else ifeq ($(LOCAL_PRODUCT_MODULE),true)
ifeq ($(PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE),true)
_cannot_use_platform_apis := true
endif
endif
ifneq (,$(filter JAVA_LIBRARIES APPS,$(LOCAL_MODULE_CLASS)))
ifndef LOCAL_SDK_VERSION
ifeq ($(_cannot_use_platform_apis),true)
ifeq (,$(LOCAL_IS_RUNTIME_RESOURCE_OVERLAY))
# Runtime resource overlays are exempted from building against System SDK.
# TODO(b/155027019): remove this, after no product/vendor apps rely on this behavior.
LOCAL_SDK_VERSION := system_current
endif
endif
endif
endif
endif
Правило применяется, чтобы убедиться, что системный img (Android Framework) может быть обновлен, в то время как другие img не обновлены.
Вы установили для LOCAL_ODM_MODULE значение true, что приведет к тому, что LOCAL_SDK_VERSION будет установлен как system_current. Затем будет показано сообщение об ошибке.
@stackoverflow.com/users/787182/yong, большое спасибо, что заметили проблему. Ваше предложение помогло мне решить ошибку сборки. Я удалил LOCAL_ODM_MODULE из Android.mk и оставил только LOCAL_PRIVATE_PLATFORM_APIS.