Включить общую библиотеку из Android.mk в cc_test из Android.bp

У меня есть Android.mk, который собирает некоторые библиотеки:

ifeq ($(CONDITION),something)
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
BDROID_DIR := $(TOP_DIR)system/bt
LOCAL_CFLAGS += \
        -Wall \
        -Werror
LOCAL_SRC_FILES := ...
LOCAL_HEADER_LIBRARIES := libutils_headers
LOCAL_C_INCLUDES += ...
LOCAL_SHARED_LIBRARIES := \
        libcutils \
        liblog
LOCAL_MODULE := libowner-vendor
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_OWNER := owner
LOCAL_PROPRIETARY_MODULE := true
include $(BUILD_SHARED_LIBRARY)

include $(call first-makefiles-under,$(LOCAL_PATH))
endif

Я хочу добавить к нему тестовый модуль, предпочтительно cc_test, потому что я хочу иметь возможность вызывать его с помощью утилиты atest.

По-видимому, просто добавить его в раздел "shared_libs", как это не работает:

Android.bp:

cc_test = {
    proprietary: true,
    name: "libowner-vendor-test",
    cflags: [
        "-Werror",
        "-Wall",
    ],
    srcs: [...],
    shared_libs: [
        ...,
        "libowner-vendor",
    ],
    host_supported: false,
}

Структура каталогов:

+ lib:
- Android.mk
- ... (sources and headers)
+ lib/test:
-- ... (test sources)

Я получаю сообщение об ошибке:

.../Android.bp:1:1: "libowner-vendor-test" depends on undefined module "libowner-vendor"

1 ответ

Согласно документации Soong, вы не можете напрямую обращаться к модулям, определенным в Android.mk.

До тех пор, пока мы полностью не перейдем из Make в Soong, конфигурации продукта Make необходимо указать значение PRODUCT_SOONG_NAMESPACES. Его значение должно быть разделенным пробелами списком пространств имен, которые Soong экспортирует в Make для построения командой m. После того, как мы полностью перешли с Make на Soong, детали включения пространств имен могут измениться.

Я не нашел пример того, как использовать PRODUCT_SOONG_NAMESPACES, Но с тех пор Android.mk является наследием, вы должны рассмотреть возможность преобразования Android.mk в Android.bp с androidmk инструмент, который является частью AOSP.

. build/envsetup.sh
lunch
m androidmk
androidmk path/to/your/Android.mk > path/to/your/Android.bp
mv path/to/your/Android.mk path/to/your/Android.mk.old
Другие вопросы по тегам