【问题标题】:JavaCV configuration in Android StudioAndroid Studio 中的 JavaCV 配置
【发布时间】:2015-05-21 21:56:48
【问题描述】:

我知道有很多与此类似的问题,但由于 JavaCV 等库的开发,其中很多似乎已经过时。

我使用来自Video Creation with Images and Audio in Android 的代码来创建电影,但我在导入库时遇到了问题。

我按照 JavaCV 页面说的做了,我把依赖放在了 gradle 中:

compile group: 'org.bytedeco', name: 'javacv', version: '0.9'

现在,我不知道我是否需要做其他事情?

我已经使用了这些导入:

import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacpp.opencv_core.IplImage;
import org.bytedeco.javacv.FFmpegFrameRecorder;

import static org.bytedeco.javacpp.opencv_highgui.cvLoadImage;

并得到这个错误:

Caused by: java.lang.NoClassDefFoundError: java.lang.ClassNotFoundException: org.bytedeco.javacpp.avutil
        at org.bytedeco.javacpp.Loader.load(Loader.java:387)
        at org.bytedeco.javacpp.Loader.load(Loader.java:353)
        at org.bytedeco.javacpp.avformat.<clinit>(avformat.java:13)
        at org.bytedeco.javacv.FFmpegFrameRecorder.<clinit>(FFmpegFrameRecorder.java:106)
        at voidstudio.app.activity.CreateMovieTask.doInBackground(CreateMovieTask.java:46)
        at voidstudio.app.activity.CreateMovieTask.doInBackground(CreateMovieTask.java:21)

Caused by: java.lang.ClassNotFoundException: org.bytedeco.javacpp.avutil
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:217)

 Caused by: java.lang.UnsatisfiedLinkError: Couldn't load jniavutil from loader dalvik.system.PathClassLoader[dexPath=/data/app/voidstudio.app-1.apk,libraryPath=/data/app-lib/voidstudio.app-1]: findLibrary returned null
        at java.lang.Runtime.loadLibrary(Runtime.java:365)
        at java.lang.System.loadLibrary(System.java:521)
        at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:535)
        at org.bytedeco.javacpp.Loader.load(Loader.java:410)

我在配置中错过了什么吗?我见过类似的问题,但没有正确的答案。

【问题讨论】:

  • 我也有同样的问题,你找到解决办法了吗?
  • 不行,这个问题可能和JavaCV的新版本有关

标签: android javacv


【解决方案1】:

更新!我还发现,如果您在 jniLibs 中有 armeabi-v7a 文件夹,或者使用的是 armeabi 文件夹以外的任何文件夹,那么您将遇到未添加 .so 文件的问题。

看起来 ffmpeg 没有被导入。我有同样的问题。这就是我所做的。如果这对您有帮助,请告诉我!

compile group: 'org.bytedeco', name: 'javacv', version: '0.9'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.9-0.9', classifier:    'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.3-0.9', classifier: 'android-arm'

【讨论】:

  • 我对 gradle 依赖项不是很熟悉,但是你从哪里获得 ffmpeg 和 opencv 的版本(版本:'2.4.9-0.9',版本:'2.3-0.9')
  • 我刚刚查看了 MavenCentral。这是 FFMPEG 的链接。看起来有一个新版本在 12 月发布。 mvnrepository.com/artifact/org.bytedeco.javacpp-presets/ffmpeg
  • 我使用的是 0.11 版的 javacv,并用我在 maven Central 中找到的最新版本替换了 'opencv' 和 'ffmpeg'。但仍然无法正常工作。我的 src/main 下确实有一个文件夹 armeabi-v7a ,其中包含其他 .so 文件。我需要对 armeabi-v7a 文件夹做些什么吗?
  • 我无法使用 gradle,不得不手动将所有内容作为库导入。这样,我可以移动 javacv 使用 armeabi-v7a 的所有 armeabi 文件。
【解决方案2】:

检查jniLibs文件夹的位置

我刚刚更改了我的 jniLibs 的位置(在它位于主文件夹之外之前),这对我有用,请查看 image!希望这会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2017-07-09
    • 2015-11-28
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多