将 .so 导入 android 工作室错误

import .so into android studio error

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

我的环境:

Ubuntu14.04,Android-studio1.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 the main activity, system.LoadLibrary("ccv"),然后调用ccv的函数ccv_read_impl.

但是 IDE 说:

对 'ccv_read_impl'

的未定义引用

我的项目结构是这样的:

my project structure

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

因为我正在尝试使用一个简单的 .so 来测试如何使用 it.I 编写 C add 函数 :int result(int a,int b), 并使其成为 libadd.so.the其他都如上;

错误信息是这样的: the error info and the code I call the function

您使用的资源似乎没问题。

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

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

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

您还可以阅读 google 中的 NDK guide

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

通用包装器可能是一项巨大的投资,但却是对社区的巨大贡献。另一方面,如果您的应用程序需要来自计算机视觉的一些非常具体的响应,您可以打造一个专门的 JNI 包装器。不过,这不是即插即用的任务。