【问题标题】:import .so into android studio error将.so导入android studio错误
【发布时间】:2023-04-09 02:57:01
【问题描述】:

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

我的环境:

Ubuntu 14.04、Android-studio 1.4Gradle 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 主activity system.LoadLibrary("ccv"),然后调用ccv 的函数ccv_read_impl。

但 IDE 说:

对“ccv_read_impl”的未定义引用

我的项目结构是这样的:

my project structure

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

因为我正在尝试使用一个简单的.so来测试如何使用它。我编写了C添加函数:int result(int a,int b),并使其成为libadd.so。其他的都是以上;

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

【问题讨论】:

  • “对我没用” 有点含糊,不是吗?您能否逐步分析您的结果与预期不同的地方?
  • 是的。我已经编辑了我的问题。
  • > 但 IDE 说:未定义对 'ccv_read_impl' 的引用。 IDE到底在哪里说的?也许最好的方法是添加带有此消息的屏幕截图
  • 好的,我会发图片
  • jni 目录(折叠在您的screenshot 中)的内容是什么?您的 MainActivity.java 是否定义了private native int result(int a, int b);

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


【解决方案1】:

您使用的资源看起来不错。

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

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

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

您也可以从谷歌阅读NDK guide

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-13
      • 1970-01-01
      • 2017-09-27
      • 2021-04-12
      • 2016-10-14
      • 2016-04-29
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多