Giphy / giphy-react-native-sdk

GIPHY React Native SDK
https://developers.giphy.com
Apache License 2.0
67 stars 25 forks source link

[3.0.0] crash on app launch with Fresco@2.5.0 #140

Closed efstathiosntonas closed 10 months ago

efstathiosntonas commented 1 year ago

🐛 Bug Report

The app builds and compiles fine, the moment metro finishes loading the bundle files on the device it crashes with:

FATAL EXCEPTION: mqt_native_modules
      Process: com.XXXX, PID: 16626
      java.lang.NoSuchFieldError: No field Companion of type Lcom/facebook/imagepipeline/core/ImagePipelineConfig$Companion; in class Lcom/facebook/imagepipeline/core/ImagePipelineConfig; or its superclasses (declaration of 'com.facebook.imagepipeline.core.ImagePipelineConfig' appears in /data/app/~~mzcqe0lBmCUT7jba5lFyXA==/com.hiki-Dy_lQ7m3bFF6p5NfiUagFA==/base.apk)
       at com.facebook.imagepipeline.backends.okhttp3.OkHttpImagePipelineConfigFactory.newBuilder(OkHttpImagePipelineConfigFactory.kt:22)
       at com.facebook.react.modules.fresco.FrescoModule.getDefaultConfigBuilder(FrescoModule.java:191)
       at com.facebook.react.modules.fresco.FrescoModule.getDefaultConfig(FrescoModule.java:170)
       at com.facebook.react.modules.fresco.FrescoModule.initialize(FrescoModule.java:134)
       at com.facebook.react.bridge.ModuleHolder.doInitialize(ModuleHolder.java:236)
       at com.facebook.react.bridge.ModuleHolder.markInitializable(ModuleHolder.java:100)
       at com.facebook.react.bridge.NativeModuleRegistry.notifyJSInstanceInitialized(NativeModuleRegistry.java:124)
       at com.facebook.react.bridge.CatalystInstanceImpl$2.run(CatalystInstanceImpl.java:443)
       at android.os.Handler.handleCallback(Handler.java:942)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
       at android.os.Looper.loopOnce(Looper.java:226)
       at android.os.Looper.loop(Looper.java:313)
       at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:228)
       at java.lang.Thread.run(Thread.java:1012)

To Reproduce

I have this on build.gradle:

    configurations.all {
        resolutionStrategy {
            force "com.facebook.fresco:fresco:2.5.0"
            force "com.facebook.fresco:fbcore:2.5.0"
            force "com.facebook.fresco:webpsupport:2.5.0"
            force "com.facebook.fresco:animated-gif:2.5.0"
            force "com.facebook.fresco:animated-webp:2.5.0"
            force "com.facebook.fresco:imagepipeline:2.5.0"
            force "com.facebook.fresco:imagepipeline-base:2.5.0"
            force "com.facebook.fresco:imagepipeline-native:2.5.0"
            force "com.facebook.fresco:memory-type-ashmem:2.5.0"
            force "com.facebook.fresco:memory-type-native:2.5.0"
            force "com.facebook.fresco:memory-type-java:2.5.0"
            force "androidx.browser:browser:1.5.0"
            force "com.squareup.okhttp3:okhttp:4.10.0"
            force "com.squareup.okhttp3:okhttp-urlconnection:4.10.0"
            force "com.squareup.okio:okio:3.3.0"
        }
    }

Note that I tried fresco@2.6.0 but the same error occurs. I've deleted node_modules, yarn.lock and reinstalled, deleted gradle cache and build folders, cleaned project but the error shows up again. When I rolled back to 2.4.2 everything worked as expected.

Your Environment

pshoniuk commented 1 year ago

Hi @efstathiosntonas, thanks for the report! It seems that some Fresco@2.5 packages aren't compatible with GIPHY RN SDK. GIPHY Android SDK uses Fresco 3.0.0. Could you please try Fresco v3?

UPD: Or you could try updating the build.gradle file like this:

configurations.all {
        resolutionStrategy {
            force "com.facebook.fresco:fresco:2.5.0"
            force "com.facebook.fresco:fbcore:2.5.0"
            force "com.facebook.fresco:webpsupport:2.5.0"
            force "com.facebook.fresco:animated-gif:2.5.0"
            force "com.facebook.fresco:animated-webp:2.5.0"
            force "com.facebook.fresco:imagepipeline:2.5.0"
            force "com.facebook.fresco:imagepipeline-base:2.5.0"
            force "com.facebook.fresco:imagepipeline-native:2.5.0"
            force "com.facebook.fresco:memory-type-ashmem:2.5.0"
            force "com.facebook.fresco:memory-type-native:2.5.0"
            force "com.facebook.fresco:memory-type-java:2.5.0"
            force "androidx.browser:browser:1.5.0"
            force "com.squareup.okhttp3:okhttp:4.10.0"
            force "com.squareup.okhttp3:okhttp-urlconnection:4.10.0"
            force "com.squareup.okio:okio:3.3.0"

            // 
            force "com.facebook.fresco:animated-drawable:2.5.0"
            force "com.facebook.fresco:imagepipeline-okhttp3:2.5.0"
        }
    }
efstathiosntonas commented 1 year ago

@pshoniuk sorry for the late reply, I was on vacation. After adding these lines:

 force "com.facebook.fresco:animated-drawable:2.5.0"
 force "com.facebook.fresco:imagepipeline-okhttp3:2.5.0"

I get this, no crash, all images are empty when giphy dialog is brought up:

Animated WebP support not set up!, {uri: https://media3.giphy.com/media/dalJ0CpF7hwmN1nZXe/100w.webp?cid=99b70a20bf0ea94858a6d7b9d021dd66d462e263df2c94cd&ep=v2_emoji&rid=100w.webp&ct=e&ejg=1&ejv=default, firstEncodedBytes: 5249464678E900005745, length: 59776}
2023-08-24 09:53:29.027 10504-10504 System.err              appname.com                             W  com.facebook.imagepipeline.decoder.DecodeException: Animated WebP support not set up!
2023-08-24 09:53:29.028 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decodeAnimatedWebp(DefaultImageDecoder.java:235)
2023-08-24 09:53:29.028 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.decoder.DefaultImageDecoder$1.decode(DefaultImageDecoder.java:65)
2023-08-24 09:53:29.028 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decode(DefaultImageDecoder.java:125)
2023-08-24 09:53:29.028 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.internalDecode(DecodeProducer.java:386)
2023-08-24 09:53:29.028 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode(DecodeProducer.java:328)
2023-08-24 09:53:29.028 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$400(DecodeProducer.java:145)
2023-08-24 09:53:29.028 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run(DecodeProducer.java:198)
2023-08-24 09:53:29.028 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.producers.JobScheduler.doJob(JobScheduler.java:229)
2023-08-24 09:53:29.028 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.producers.JobScheduler.access$000(JobScheduler.java:28)
2023-08-24 09:53:29.029 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:95)
2023-08-24 09:53:29.029 10504-10504 System.err              appname.com                             W   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2023-08-24 09:53:29.029 10504-10504 System.err              appname.com                             W   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2023-08-24 09:53:29.029 10504-10504 System.err              appname.com                             W   at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:52)
2023-08-24 09:53:29.029 10504-10504 System.err              appname.com                             W   at java.lang.Thread.run(Thread.java:920)

I believe using fresco 3.0.0 should be marked as breaking change. Fresco@2.6.0 [1] and @3.0.0 [2] have a bug where images are not displayed correctly after app update from Play Store. Removing the force xxx:2.5.0 in configurations.all is not an option.

pshoniuk commented 1 year ago

@efstathiosntonas We've released the GIPHY Android SDK with support for Fresco 2.5. You can try to update your config to force this version as follows:

configurations.all {
  resolutionStrategy {        
      //...
      force "com.giphy.sdk:ui:2.3.10-fresco-v2.5.0"
  }
}
pshoniuk commented 10 months ago

Duplicate of https://github.com/Giphy/giphy-react-native-sdk/issues/153