Android Studio中预构建的C库

时间:2015-07-10 15:51:27

标签: android android-studio android-ndk java-native-interface

几个月前,我开发了一个使用C语言中的本机代码的Android库。我在Eclipse中开发了这样的库,因为Android Studio不支持Android NDK。

要分发库,我将项目编译为.jar(不包括AndroidManifest.xml)。如果有人想在Eclipse中使用该库,那么它需要做的就是在文件夹/libs中添加.jar以及为所有体系结构预先构建的C代码(.so)。这工作,客户端项目最终得到这些文件:

MyProject
---| libs/
-------| Library.jar
-------| armeabi/
-------| x86/
-------| ...

现在我希望能够在Android Studio项目中以类似的方式使用我的库。

我尝试过:

在应用程序模块的/libs文件夹中添加Library.jar。然后,添加build.gradle文件(在依赖项中)compile files('libs/Library.jar')。最后,在jniLibs中添加为所有体系结构编译的C代码(.so)。 意思是,我有这个文件:

MyProject
---| app
-------| libs/
-----------| Library.jar
-------| jniLibs/
-----------| armeabi/
-----------| x86/
-----------| ...

但是,我总是以这个例外结束:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.app-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "lib.so"

我已查找此异常,因为系统无法找到已编译的C库。但是,我不知道在哪里可以放置我预先构建的C库,以便在Library.jar中找到。

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

您似乎必须将jniLibs文件夹放入主模块下的src文件夹中。这样,Android Studio应该能够选择.so文件。

结构应如下所示:

MyProject
---| libs/
-----| Library.jar
---| src/
-----| main/
-------| jniLibs/
---------| armeabi/
---------| x86/
---------| ...

来源:https://stackoverflow.com/a/29508776/1691231

答案 1 :(得分:1)

您还可以在app build.gradle中定义jniLibs位置 sourceSets { main { jniLibs.srcDirs = [ 'your/path/to/jniLibs')] } }