Как исправить 'java.lang.UnsatisfiedLinkError: не удалось найти DSO для загрузки: libgifimage.so "' при использовании фрески с gif - PullRequest
0 голосов
/ 12 июня 2019

Я использую Fresco для загрузки GIF-файлов в нашем приложении, это прекрасно работает в режиме отладки, но при сборке для prod приложение вылетает при попытке загрузить Gif

Фреско говорит, что Proguard не требуется, поскольку они заботятся о https://frescolib.org/docs/shipping.html

Зависимости Gradle:

    implementation 'com.facebook.fresco:fresco:1.13.0'
    implementation 'com.facebook.fresco:animated-gif:1.13.0'
    implementation 'com.facebook.fresco:animated-webp:1.13.0'

При запуске мы бежим за исключением ниже

java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libgifimage.so caused by: JNI_ERR returned from JNI_OnLoad in "/data/app/com.app.XXX==/lib/arm64/libgifimage.so"
        at com.facebook.soloader.SoLoader.b(SoLoader.java:738)
        at com.facebook.soloader.SoLoader.a(SoLoader.java:591)
        at com.facebook.soloader.SoLoader.a(SoLoader.java:529)
        at com.facebook.soloader.SoLoader.a(SoLoader.java:484)
        at com.facebook.animated.gif.GifImage.g(GifImage.java:42)
        at com.facebook.animated.gif.GifImage.a(GifImage.java:1077)
        at o.pr.a(AnimatedImageFactoryImpl.java:88)
        at com.facebook.fresco.animation.factory.AnimatedFactoryV2Impl$1.a(AnimatedFactoryV2Impl.java:89)
        at com.facebook.imagepipeline.decoder.a.b(DefaultImageDecoder.java:136)
        at com.facebook.imagepipeline.decoder.a$1.a(DefaultImageDecoder.java:60)
        at com.facebook.imagepipeline.decoder.a.a(DefaultImageDecoder.java:121)
        at com.facebook.imagepipeline.producers.k$c.a(DecodeProducer.java:1277)
        at com.facebook.imagepipeline.producers.k$c$1.a(DecodeProducer.java:166)
        at com.facebook.imagepipeline.producers.JobScheduler.a(JobScheduler.java:1202)
        at com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:73)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at o.rc$1.run(PriorityThreadFactory.java:51)
        at java.lang.Thread.run(Thread.java:784)
2019-06-11 17:26:20.505 32234-32234/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.app.manch, PID: 32234
    java.lang.UnsatisfiedLinkError: No implementation found for com.facebook.animated.gif.a com.facebook.animated.gif.GifImage.nativeGetFrame(int) (tried Java_com_facebook_animated_gif_GifImage_nativeGetFrame and Java_com_facebook_animated_gif_GifImage_nativeGetFrame__I)
        at com.facebook.animated.gif.GifImage.nativeGetFrame(Native Method)
        at com.facebook.animated.gif.GifImage.a(GifImage.java:2161)
        at com.facebook.imagepipeline.animated.impl.a.<init>(AnimatedDrawableBackendImpl.java:62)
        at com.facebook.fresco.animation.factory.AnimatedFactoryV2Impl$5.a(AnimatedFactoryV2Impl.java:162)
        at com.facebook.fresco.animation.factory.a.b(ExperimentalBitmapAnimationDrawableFactory.java:1138)```

1 Ответ

0 голосов
/ 26 июня 2019

Исправили это, добавив следующие правила защиты

-keep class com.facebook.imagepipeline.animated.** { *; }
-keep class com.facebook.imagepipeline.gif.** { *; }
-keep class com.facebook.imagepipeline.webp.** { *; }
-keep class com.facebook.animated.** { *; }
...