Build 如何在最终apk中正确解决android ndk共享库依赖关系

Build 如何在最终apk中正确解决android ndk共享库依赖关系,build,android-ndk,shared-libraries,Build,Android Ndk,Shared Libraries,假设我有一个包含3个项目的MVS解决方案。其中两个是库,第三个是exe。A.lib,B.lib,C.exe。A依赖于B,C包含A和B,我们都很高兴,当我们将两者都包含在C中时,链接器从B中找到了A需要的一切 我正试图用android ndk(使用ndk构建)复制这一点,因此最简单的方法似乎是创建两个共享lib(A.so和B.so),并将它们包含在第三个C.so中,然后在C.apk中打包为本机活动 显然A.so不会构建,除非我在它的makefile中包含B.so。因此,与其 A.lib--->

假设我有一个包含3个项目的MVS解决方案。其中两个是库,第三个是exe。A.lib,B.lib,C.exe。A依赖于B,C包含A和B,我们都很高兴,当我们将两者都包含在C中时,链接器从B中找到了A需要的一切

我正试图用android ndk(使用ndk构建)复制这一点,因此最简单的方法似乎是创建两个共享lib(A.so和B.so),并将它们包含在第三个C.so中,然后在C.apk中打包为本机活动

显然A.so不会构建,除非我在它的makefile中包含B.so。因此,与其

A.lib---> C.exe
B.lib--/
正如在windows中一样,我现在需要:

B.so --> A.so --> C.so
随着越来越多的库被添加,这变得非常混乱,因为在将lib添加到最终apk时,需要在每个lib中解析链接器符号,而不是解析链接器符号。 可以使用以下方法绕过此行为:

LOCAL_ALLOW_UNDEFINED_SYMBOLS=true
在库的Android.mk中,但是当使用

static 
{
 System.loadLibrary("B");
 System.loadLibrary("A");
}
它将在运行时失败,说明A找不到某些符号(在B中定义)


有没有一种“正确”的方法可以让单个lib生成,允许使用未定义的符号,然后确保在我将它们全部包含在最终项目中时找到它们?

结果是,如果您将它们编译为静态lib(.a),并使用
include$(预构建静态库)
方法将它们包含在项目中,以及在本地\整体\静态\库中按依赖关系的顺序列出它们:=BA