ServiceMode/Android.mk: указывает как LOCAL_SDK_VERSION (system_current), так и LOCAL_PRIVATE_PLATFORM_APIS (true), но должен указывать только один

Я разработчик прошивки 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)

0
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Приложения в разделах 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.

Shreyas R 07.02.2023 06:46

Другие вопросы по теме