将 Android.mk 中的共享库包含到 Android.bp 的 cc_test 中

a_g*_*irl 5 android android-soong

我有一个 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
Run Code Online (Sandbox Code Playgroud)

我想向其中添加一个测试模块,最好是 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,
}
Run Code Online (Sandbox Code Playgroud)

目录结构:

+ lib:
- Android.mk
- ... (sources and headers)
+ lib/test:
-- ... (test sources)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

.../Android.bp:1:1: "libowner-vendor-test" depends on undefined module "libowner-vendor"
Run Code Online (Sandbox Code Playgroud)

Sim*_*mpl 4

根据Soong 文档,您无法直接访问 Android.mk 中定义的模块。

在我们从 Make 完全转换为 Soong 之前,Make 产品配置需要指定 PRODUCT_SOONG_NAMESPACES 的值。它的值应该是一个以空格分隔的命名空间列表,Soong 将其导出到 Make 以由 m 命令构建。在我们从 Make 完全转换为 Soong 后,启用命名空间的细节可能会发生变化。

我没有找到如何使用 的示例PRODUCT_SOONG_NAMESPACES。但由于Android.mk它是遗留的,您应该考虑使用 AOSP 中的工具进行Android.mk转换。Android.bpandroidmk

. 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
Run Code Online (Sandbox Code Playgroud)