此问题是此 other question of mine 之后的后续线程.
最终成功使用 gradle 和 cmake 构建 apk 文件以将 FFMPEG 集成到 Android 项目中后,我遇到了一个新的异常,该异常在调用 System.loadLibrary
时抛出。
java.lang.UnsatisfiedLinkError: dlopen failed: library "libavutil.so.56" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
at java.lang.System.loadLibrary(System.java:1657)
at com.hmomeni.canto.activities.EditActivity.<init>(EditActivity.kt:26)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1174)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
这是导致错误的代码部分:
class EditActivity : AppCompatActivity(), View.OnClickListener {
init {
System.loadLibrary("Canto")
}
...
}
我尝试将 .so
文件移动到 PROJECT/app/jniLibs
中,然后将以下行添加到 build.gradle
文件中没有效果。
sourceSets.main.jniLibs.srcDirs = ['./jniLibs/']
最佳答案
如果您按如下方式配置jniLibs.srcDirs:
sourceSets.main.jniLibs.srcDirs = ['./jniLibs/']
那么您的路径 app/jniLibs/ffmpeg/{ANDROID_ABI}/lib
不正确,您的构建系统将无法找到并打包您的 .so
文件。
尝试使您的jniLibs结构如下:
jniLibs
│ ├── x86
│ ├── x86_64
│ ├── arm64-v8a
│ ├── armeabi-v7a
不要在{ANDROID_ABI}/
后面添加lib
。
---编辑---
And after manually loading the libraries using System.loadLibrary I encountered a new error which indicates that libavutil has text relocations and it seems that for API-23 and above it is not permitted.
也许您应该尝试使用选项 --disable-asm
和 -fPIC
构建 ffmpeg,以获得无需文本重定位的二进制文件。看到这里https://stackoverflow.com/a/39965908/8034839 ,但 NEON 看起来仍然存在一些问题。
另一个供您引用的讨论: https://stackoverflow.com/a/50207091/8034839
关于android - 使用cmake集成FFMPEG : dlopen failed: library "libavutil.so.56" not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53419416/