如何在Android Studio 1.3.2中包含预构建的.so库

时间:2015-10-05 06:13:36

标签: java android c gradle android-ndk

我无法将使用ndk-build构建的本机库集成到我的Android Studio项目中。问题是我陷入了Gradle语法全新的过渡期,但文档和在线帮助仍然引用了旧语法。

我的库位于我的项目的这个位置:app/libs/(armeabi and others)/libsample.so,针对不同的体系结构,共有7个相同库的变体。我还在app/src/main/jni/headers中有这个库的头文件,以及在app/src/main/jni/wrapper.c上调用此库中定义的函数的C包装器文件。包装器文件有#include "headers/sample.h"

主要问题是我不知道如何设置我的Gradle构建以使用预构建的共享库。我有一个工作Android.mk文件可以成功编译我的包装器以使用共享库,但我不能在Android Studio中使用它,因为Gradle生成它自己的makefile并使用它。任何人都知道如何从这里开始?

1 个答案:

答案 0 :(得分:0)

你应该能够简单地将预先构建的.so文件放入(项目模块)/ src / main / jniLibs /(目标abi),它们将被包含在Android Studio生成的最终apk中。

One caveat:我不是百分之百确定,但看起来Android的安装程序可以选择从abi文件夹中删除一些库,它决定哪个库比当前设备更适合于其他abi文件夹。 apk(例如armeabi和armeabi-v7a可能兼容,但armeabi-v7a可能更合适)如果所述库仅存在于较差的文件夹中。如果您没有本机库的源代码,这一点就变得很重要。您可以通过在模块的build.gradle中指定单个abi(请参阅链接问题的答案)来解决此问题,该abi与您编译本机库的abi相匹配,或者通过设置jni.srcDirs来禁用Android Studio的ndk构建过程android.sourceSets.main中的= []