react-native項(xiàng)目中Android端gif奔潰

將項(xiàng)目中的react-native版本從0.45升級(jí)到了0.48后,發(fā)現(xiàn)Android端在顯示gif時(shí)奔潰了,而ios端沒有這個(gè)情況。

出錯(cuò)信息為:

1java.lang.NoClassDefFoundError:Failed resolution of: Lcom/facebook/imagepipeline/memory/PooledByteBuffer;

2com.facebook.imagepipeline.animated.factory.AnimatedImageFactoryImpl.decodeGif(AnimatedImageFactoryImpl.java:84)

3......

4Caused by:

5java.lang.ClassNotFoundException:Didn't find class "com.facebook.imagepipeline.memory.PooledByteBuffer" on path: DexPathList[[zip file "/data/app/mobi.bigeye.bigeyeandroid-1/base.apk"],nativeLibraryDirectories=[/data/app/mobi.bigeye.bigeyeandroid-1/lib/arm, /data/app/mobi.bigeye.bigeyeandroid-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]

6dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

7java.lang.ClassLoader.loadClass(ClassLoader.java:511)

8java.lang.ClassLoader.loadClass(ClassLoader.java:469)

9com.facebook.imagepipeline.animated.factory.AnimatedImageFactoryImpl.decodeGif(AnimatedImageFactoryImpl.java:84)

10com.facebook.imagepipeline.decoder.DefaultImageDecoder.decodeGif(DefaultImageDecoder.java:145)

11com.facebook.imagepipeline.decoder.DefaultImageDecoder$1.decode(DefaultImageDecoder.java:65)

12com.facebook.imagepipeline.decoder.DefaultImageDecoder.decode(DefaultImageDecoder.java:126)

13com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode(DecodeProducer.java:240)

14com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$200(DecodeProducer.java:112)

15com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run(DecodeProducer.java:145)

16com.facebook.imagepipeline.producers.JobScheduler.doJob(JobScheduler.java:207)

17com.facebook.imagepipeline.producers.JobScheduler.access$000(JobScheduler.java:27)

18com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:78)

19java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)

20java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)

21com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:43)

22java.lang.Thread.run(Thread.java:833)

發(fā)現(xiàn)是fresco的某個(gè)類文件找不到,而在react-native中為了支持gif,在android的build.gradle文件中,已經(jīng)添加了對(duì)fresco的引用

// For animated GIF support

compile'com.facebook.fresco:animated-gif:0.14.1'

// For WebP support, including animated WebP

compile'com.facebook.fresco:animated-webp:0.14.1

compile'com.facebook.fresco:webpsupport:0.14.1'

在Android Studio追蹤class文件,也能找到對(duì)應(yīng)的class文件,但卻發(fā)現(xiàn)好像有多個(gè)版本 0.14.1? 1.3等。

為了確定,在Android項(xiàng)目的Project視圖下,打開External Libraries文件夾,也的確發(fā)現(xiàn)了多個(gè)library,原因確定了項(xiàng)目中有多個(gè)fresco的版本,

為了弄清是哪些項(xiàng)目引用了fresco,參考了http://www.itdecent.cn/p/87d679f596fa這個(gè)文章后,進(jìn)入命令行,進(jìn)入android目錄

cd android

./gradlew -q app:dependencies 查看當(dāng)前項(xiàng)目的依賴情況,發(fā)現(xiàn)一個(gè)名為react-native-image-picker的模塊,依賴了fresco,且版本為1.3,為了避免沖突,將主模塊的build.gradle文件的fresco版本號(hào)由0.14.1改為1.3,改后的

// For animated GIF support

compile'com.facebook.fresco:animated-gif:1.3.0'

// For WebP support, including animated WebP

compile'com.facebook.fresco:animated-webp:1.3.0'

compile'com.facebook.fresco:webpsupport:1.3.0'

測(cè)試后,gif奔潰問題解決。

總結(jié):

1 通過(guò)Android Studio的文件追蹤(Command + B), 查看class文件是否缺失。

2 通過(guò)命令行./gradlew -q app:dependencies 查看當(dāng)前項(xiàng)目的依賴情況,從而解決依賴沖突問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容