如何创建在Android NDK上运行的预构建库?

如何创建在Android NDK上运行的预构建库?,android,android-ndk,Android,Android Ndk,我主要是一名C开发人员,负责将一些C库构建到可以构建到Android应用程序中的共享对象文件中。我遇到了一个讨论如何将预构建库添加到Android Studio项目中的例子,但关于如何实际构建预构建库的信息很少。我确实发现有信息说,由于ABI的细微差别,我不能仅仅使用Linux交叉编译器来实现这一点。我该怎么做呢?我需要使用Android Studio吗?我的资料来源需要包括一些特殊的标题吗?或者我可以使用NDK中的交叉编译器并使用gcc-shared-fPIC进行编译吗?使用NDK工具链构建库

我主要是一名C开发人员,负责将一些C库构建到可以构建到Android应用程序中的共享对象文件中。我遇到了一个讨论如何将预构建库添加到Android Studio项目中的例子,但关于如何实际构建预构建库的信息很少。我确实发现有信息说,由于ABI的细微差别,我不能仅仅使用Linux交叉编译器来实现这一点。我该怎么做呢?我需要使用Android Studio吗?我的资料来源需要包括一些特殊的标题吗?或者我可以使用NDK中的交叉编译器并使用
gcc-shared-fPIC
进行编译吗?

使用NDK工具链构建库就足够了。通常可以使用NDK支持的最低平台API级别。您应该为不同的CPU生成二进制文件。如果愿意,您可以跳过32位版本,但Android Play Store的规则要求您拥有64位版本。这个任务不需要Android Studio,也不需要对源代码进行任何更改


如果你的库导出C++ API,使用<强> C++ +>共享>强/运行时。

预构建是当你已经有一个已经存在的NDK文件时,你不需要。您应该看看这个链接,它似乎在谈论将本机代码添加到Studio项目。我试图做的是预构建本机代码,以便其他团队(不应该看到我的源代码)可以将其添加到项目中。所以我不需要对JNI头和JNIEXPORT宏做任何事情?如果我直接使用NDK交叉编译器编译so文件,我将如何从Java调用其函数?要与Java/Kotlin通信,需要适当的API。您可以使用JNI手动添加它,也可以在JNA、SWIG或诸如此类的帮助下添加它。为了保持开发过程的整洁,您可以选择将JNI包装器从核心库中分离出来,请参见Adi Shavit。这样,包装器库源代码就可以安全地与Android开发人员共享。