导入.so到android studio错误

时间:2015-11-09 14:49:55

标签: android android-ndk java-native-interface android-gradle .so

我正在尝试将第三方.so导入到我的android-studio项目中,但我不知道该怎么做。

我的环境:

Ubuntu 14.04, Android-studio 1.4 Gradle 2.4 ,NDK r10e

那么,有没有人可以帮助我?非常感谢。

我做了什么:

  1. 下载ccv(github.com/liuliu/ccv)源代码,然后使用arm-linux-androideabi-gcc获取libccv.so文件。
  2. 将libccv.so文件复制到文件夹/ src / main / jniLibs / armeabi
  3. int主要活动,system.LoadLibrary(" ccv"),然后调用ccv的函数ccv_read_impl。
  4. 但IDE说:

    未定义对" ccv_read_impl'

    的引用

    我的项目结构是这样的:

    my project structure

    当@sonic说,我在我的MainActivity中添加了System.loadLibrary(" ccv"),但错误仍然存​​在。

    因为我试图使用一个简单的.so来测试如何使用它。我编写了C add函数:int result(int a,int b),并使它成为libadd.so.the其他是全部如上;

    错误信息如下: the error info and the code I call the function

2 个答案:

答案 0 :(得分:2)

您使用的资源似乎很好。

但是,您应该在.so/app/src/main/jniLibs/armeabi-v7(如果jniLibsarmeabi-v7文件夹不存在,请创建它们。

您可以通过运行.so来检查您的apk包是unzip -l path_to_your_apk。你应该有一行像your_lib.so

最后确保在运行时加载库。你应该在某个时候致电System.loadLibrary("your_lib");

您还可以从谷歌阅读NDK guide

答案 1 :(得分:0)

除了如何使用Android Studio组织环境的学习曲线外,我担心您在此处遇到一个主要障碍:ccv library does not have a suppored Java wrapper 。您可以为Android构建二进制文件,但不能直接从Java调用其函数。

通用包装器可能是一笔巨大的投资,但对社区的贡献很大。另一方面,如果您的应用程序需要Computer Vision的一些非常具体的响应,您可能会伪造一个专门的JNI包装器。不过,这不是一个即插即用的任务。