Интеграция FFMPEG с использованием cmake: dlopen завершилась неудачно: библиотека "libavutil.so.56" не найдена - PullRequest
0 голосов
/ 21 ноября 2018

Этот вопрос является последующим потоком, следующим за этим другим моим вопросом .

После того, как мне наконец удалось успешно построить файл apk с помощью gradle и cmake для интеграции 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/']

1 Ответ

0 голосов
/ 25 ноября 2018

Если вы настроите jniLibs.srcDirs , как показано ниже:

sourceSets.main.jniLibs.srcDirs = ['./jniLibs/']

Тогда ваш путь app/jniLibs/ffmpeg/{ANDROID_ABI}/lib будет неправильным, а ваши .so файлы не будут найдены и упакованывашей системой сборки.

Постарайтесь, чтобы ваша jniLibs структура была такой, как показано ниже:

jniLibs
│   ├── x86
│   ├── x86_64
│   ├── arm64-v8a
│   ├── armeabi-v7a

Не добавляйте lib позади {ANDROID_ABI}/.


--- Редактировать ---

И после ручной загрузки библиотек с помощью System.loadLibrary я обнаружил новую ошибку, которая указывает, что libavutil имеет перемещения текста, и кажется, что для API-23 и выше недопустимо.

Возможно, вам следует попробовать собрать свой ffmpeg с опцией --disable-asm и -fPIC, чтобы получить двоичный файл без перемещения текста.Смотрите здесь https://stackoverflow.com/a/39965908/8034839,, но, похоже, все еще есть проблема с NEON.

Другое обсуждение для вашей информации: https://stackoverflow.com/a/50207091/8034839

...