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

时间:2018-02-02 08:51:35

标签: android c++ java-native-interface shared-libraries android-build

我正在使用Android-O,我看到大多数.mk文件都被.bp文件替换。 现在我修改了使用.bp文件构建的硬件/接口下的一个源代码。

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

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

任何帮助/评论都将非常感谢。

1 个答案:

答案 0 :(得分:1)

经过一番努力,我找到了解决方案

1)有一个名为androidmk的工具用于生成Android.mk文件中的Android.bp文件

Use below commands to build androidmk tool 


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

Write normal Android.mk file for prebuilt library like this

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)

Now run below command
androidmk Android.mk > Android.bp

Android.bp file will be created as below

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)
    }

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

**out/target/product/mytest/symbols/system/lib64/newlib.so: no symbols**

So I added this 

strip: {
    none:true,
}

3)现在使用新的Android.bp我仍然遇到此错误

**error: newlib.so incompatible target** 

So I added this (created 2 directories lib and lib64 with corresponding libraries) 


 target: {
        android_arm: {
            srcs: ["lib/newlib.so"],
        },
        android_arm64: {
            srcs: ["lib64/newlib.so"],
        }
  },

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

cc_prebuilt_library_shared {
        name: "newlib",
        target: {
            android_arm: {
                srcs: ["lib/newlib.so"],
            },
            android_arm64: {
                srcs: ["lib64/newlib.so"],
            },
        },
        strip: {
            none:true,
        },
    }