如何在 Android.bp 文件中包含预建库?

Vij*_* PO 4 c++ java-native-interface android shared-libraries android-build

我使用的是 Android-O,我看到大部分 .mk 文件都被 .bp 文件替换了。现在我已经修改了使用 .bp 文件构建的硬件/接口下的源代码之一。

现在我有一个由源代码使用的预构建共享库。

但我无法弄清楚如何将预建库包含到 Android.bp 文件中。

任何帮助/评论将不胜感激。

Vij*_* PO 11

经过一番挣扎,我找到了解决方案

1)有一个叫做androidmk的工具可以从Android.mk文件中生成Android.bp文件

使用以下命令构建 androidmk 工具

source build/envsetup.sh
    m -j blueprint_tools
Output Path: out/soong/host/linux-x86/bin/androidmk (depending on your host)    
Run Code Online (Sandbox Code Playgroud)

像这样为预建库编写普通的 Android.mk 文件

include $(CLEAR_VARS)
    LOCAL_MODULE := newlib
    LOCAL_SRC_FILES := newlib.so
    LOCAL_MODULE_SUFFIX := .so
    LOCAL_MODULE_CLASS := SHARED_LIBRARIES
    LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
    LOCAL_MODULE_TAGS := optional
    include $(BUILD_PREBUILT)
Run Code Online (Sandbox Code Playgroud)

现在运行下面的命令androidmk Android.mk > Android.bp Android.bp 文件将被创建如下

cc_prebuilt_library_shared {
        name: "newlib",
        srcs: ["newlib.so"],

        //ANDROIDMK TRANSLATION ERROR: unspported assignment to LOCAL_MODULE_PATH
        //LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARY)
    }
Run Code Online (Sandbox Code Playgroud)

2) 现在使用上面的 Android.bp 文件我得到以下错误

**out/target/product/mytest/symbols/system/lib64/newlib.so: no symbols**
Run Code Online (Sandbox Code Playgroud)

所以我加了这个

strip: {
    none:true,
}
Run Code Online (Sandbox Code Playgroud)

3) 现在有了新的 Android.bp 我仍然收到这个错误

**error: newlib.so incompatible target** 
Run Code Online (Sandbox Code Playgroud)

所以我添加了这个(使用相应的库创建了 2 个目录 lib 和 lib64)

 target: {
        android_arm: {
            srcs: ["lib/newlib.so"],
        },
        android_arm64: {
            srcs: ["lib64/newlib.so"],
        }
  },
Run Code Online (Sandbox Code Playgroud)

所以最后在下面的 Android.bp 文件中我的要求得到了满足

cc_prebuilt_library_shared {
        name: "newlib",
        target: {
            android_arm: {
                srcs: ["lib/newlib.so"],
            },
            android_arm64: {
                srcs: ["lib64/newlib.so"],
            },
        },
        strip: {
            none:true,
        },
    }
Run Code Online (Sandbox Code Playgroud)