将 .so 导入 android 工作室错误
import .so into android studio error
我正在尝试将第三方 .so 导入到我的 android-studio 项目中,但我不知道该怎么做。
我的环境:
Ubuntu14.04,Android-studio1.4,Gradle 2.4,NDK r10e
所以,有没有人可以帮助我?非常感谢。
我做了什么:
- 下载ccv(github.com/liuliu/ccv)源码,然后用arm-linux-androideabi-gcc得到libccv.so文件。
- 将 libccv.so 文件复制到文件夹 /src/main/jniLibs/armeabi
- int the main activity, system.LoadLibrary("ccv"),然后调用ccv的函数ccv_read_impl.
但是 IDE 说:
对 'ccv_read_impl'
的未定义引用
我的项目结构是这样的:
正如@sonic 所说,我在我的 MainActivity 中添加了 System.loadLibrary("ccv"),但错误仍然存在。
因为我正在尝试使用一个简单的 .so 来测试如何使用 it.I 编写 C add 函数 :int result(int a,int b), 并使其成为 libadd.so.the其他都如上;
您使用的资源似乎没问题。
但是您应该将 .so
放在 /app/src/main/jniLibs/armeabi-v7
中(如果 jniLibs
或 armeabi-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 包装器。不过,这不是即插即用的任务。
我正在尝试将第三方 .so 导入到我的 android-studio 项目中,但我不知道该怎么做。
我的环境:
Ubuntu14.04,Android-studio1.4,Gradle 2.4,NDK r10e
所以,有没有人可以帮助我?非常感谢。
我做了什么:
- 下载ccv(github.com/liuliu/ccv)源码,然后用arm-linux-androideabi-gcc得到libccv.so文件。
- 将 libccv.so 文件复制到文件夹 /src/main/jniLibs/armeabi
- int the main activity, system.LoadLibrary("ccv"),然后调用ccv的函数ccv_read_impl.
但是 IDE 说:
对 'ccv_read_impl'
的未定义引用我的项目结构是这样的:
正如@sonic 所说,我在我的 MainActivity 中添加了 System.loadLibrary("ccv"),但错误仍然存在。
因为我正在尝试使用一个简单的 .so 来测试如何使用 it.I 编写 C add 函数 :int result(int a,int b), 并使其成为 libadd.so.the其他都如上;
您使用的资源似乎没问题。
但是您应该将 .so
放在 /app/src/main/jniLibs/armeabi-v7
中(如果 jniLibs
或 armeabi-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 包装器。不过,这不是即插即用的任务。