Fresco.initialize()報錯 failed resolution of: landroidx/core/util/pools$synchronizedpool;

今天弄了一天的這個問題,記錄一下解決方法:

根據官網配置的的是:

implementation 'com.facebook.fresco:fresco:2.1.0'
implementation 'com.facebook.fresco:animated-gif:2.1.0'
implementation 'com.facebook.fresco:webpsupport:2.1.0'

但是運行時報錯:

2020-03-28 16:48:23.054 3901-3901/com.example.apple.frescoapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.apple.frescoapp, PID: 3901
    java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/util/Pools$SynchronizedPool;
        at com.facebook.imagepipeline.platform.PlatformDecoderFactory.buildPlatformDecoder(PlatformDecoderFactory.java:35)
        at com.facebook.imagepipeline.core.ImagePipelineFactory.getPlatformDecoder(ImagePipelineFactory.java:308)
        at com.facebook.imagepipeline.core.ImagePipelineFactory.getPlatformBitmapFactory(ImagePipelineFactory.java:300)
        at com.facebook.imagepipeline.core.ImagePipelineFactory.getAnimatedFactory(ImagePipelineFactory.java:163)
        at com.facebook.imagepipeline.core.ImagePipelineFactory.getImageDecoder(ImagePipelineFactory.java:223)
        at com.facebook.imagepipeline.core.ImagePipelineFactory.getProducerFactory(ImagePipelineFactory.java:323)
        at com.facebook.imagepipeline.core.ImagePipelineFactory.getProducerSequenceFactory(ImagePipelineFactory.java:356)
        at com.facebook.imagepipeline.core.ImagePipelineFactory.getImagePipeline(ImagePipelineFactory.java:278)
        at com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilderSupplier.<init>(PipelineDraweeControllerBuilderSupplier.java:52)
        at com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilderSupplier.<init>(PipelineDraweeControllerBuilderSupplier.java:43)
        at com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilderSupplier.<init>(PipelineDraweeControllerBuilderSupplier.java:36)
        at com.facebook.drawee.backends.pipeline.Fresco.initializeDrawee(Fresco.java:121)
        at com.facebook.drawee.backends.pipeline.Fresco.initialize(Fresco.java:110)
        at com.facebook.drawee.backends.pipeline.Fresco.initialize(Fresco.java:54)
        at com.facebook.drawee.backends.pipeline.Fresco.initialize(Fresco.java:40)
        at com.example.apple.frescoapp.MyApp.onCreate(MyApp.java:21)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5361)
        at android.app.ActivityThread.-wrap2(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1528)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.core.util.Pools$SynchronizedPool" on path: DexPathList[[zip file "/data/app/com.example.apple.frescoapp-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.apple.frescoapp-2/lib/x86, /data/app/com.example.apple.frescoapp-2/base.apk!/lib/x86, /system/lib, /vendor/lib]]……

後來陰差陽錯修改了一下Fresco版本號這個問題就解決了,把2.1.0改爲1.12.0

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.apple.frescoapp"
        minSdkVersion 15
        targetSdkVersion 28
        multiDexEnabled true
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.facebook.fresco:fresco:1.12.0'
    implementation 'com.facebook.fresco:animated-gif:1.12.0'
    implementation 'com.facebook.fresco:webpsupport:1.12.0'
}

最後幾個注意事項:

1.初始化Fresco和配置MultiDex

package com.example.apple.frescoapp;

import android.app.Application;
import android.content.Context;
import android.support.multidex.MultiDex;

import com.facebook.drawee.backends.pipeline.Fresco;

/**
 * Name:
 *
 * @author dengyalan
 * Company MAIGOO 長沙榜中榜網絡科技有限公司
 * Date: 2020/3/28 10:44
 */
public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        try {
            MultiDex.install(this);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

       2.清單文件開啓網絡權限

       3.com.facebook.drawee.view.SimpleDraweeView控件不能設置wrapcontent

       4.defaultConfig添加屬性:multiDexEnabled true

僅爲個人操作經驗,不知道原理,如有知道原理望指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章