You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Fresco仅部分设备报ClassNotFoundException: androidx.exifinterface.media.ExifInterface

解决Fresco初始化阶段找不到androidx.exifinterface.media.ExifInterface的问题

针对你遇到的仅部分设备出现的ClassNotFoundException/NoClassDefFoundError问题,可按以下步骤排查解决:

1. 确保依赖正确引入到App模块

仅在库项目中添加依赖可能导致App模块未打包该类,需确认:

  • 在libs.versions.toml中配置正确的版本:
    [versions]
    exifinterface = "1.3.7"
    
    [libraries]
    exifinterface = { group = "androidx.exifinterface", name = "exifinterface", version.ref = "exifinterface" }
    
  • 在App模块的build.gradle中显式引入依赖:
    dependencies {
        implementation libs.exifinterface
    }
    

若存在依赖冲突,可强制引入指定版本:

implementation libs.exifinterface {
    force = true
}

2. 配置正确的R8/ProGuard规则

将以下规则添加到App模块的proguard-rules.pro或r8-rules.pro中,避免类或方法被移除:

# 保留ExifInterface核心类及所有成员
-keep class androidx.exifinterface.media.ExifInterface { *; }
# 保留相关内部类(若有)
-keep class androidx.exifinterface.media.** { *; }
# 保留Fresco可能反射调用的构造方法和核心方法
-keepclassmembers class androidx.exifinterface.media.ExifInterface {
    public <init>(android.content.ContentResolver, android.net.Uri);
    public <init>(java.io.File);
    public <init>(java.io.InputStream);
    public java.lang.String getAttribute(java.lang.String);
    public void setAttribute(java.lang.String, java.lang.String);
}

3. 排查依赖传递问题

执行./gradlew app:dependencies命令查看App模块的依赖树,确认androidx.exifinterface:exifinterface是否被正确引入,若发现某个依赖主动排除了该库,需针对性调整(例如移除对应依赖的exclude配置)。

4. 适配Fresco与ExifInterface版本兼容性

尝试升级ExifInterface到最新稳定版(如1.4.0),同时确认Fresco版本是否与该版本兼容——部分旧版Fresco可能对高版本ExifInterface存在适配问题,或反之。

附报错堆栈信息:

java.lang.ClassNotFoundException: androidx.exifinterface.media.ExifInterface
 [wrapped] java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/exifinterface/media/ExifInterface;
        at c6.b.a(b.java:8)
        at v5.f.l(f.java:482)
        at com.facebook.imagepipeline.producers.LocalFetchProducer.d(LocalFetchProducer.java:162)
        at com.facebook.imagepipeline.producers.SwallowResultProducer.run(SwallowResultProducer.java:12)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at com.google.android.material.datepicker.DateFormatTextWatcher.lambda$new$0(DateFormatTextWatcher.java:72)
        at androidx.activity.ComponentActivity$onBackPressedDispatcher$2$$ExternalSyntheticLambda1.run(ComponentActivity.java:0)
        at java.lang.Thread.run(Thread.java:919)

内容的提问来源于stack exchange,提问作者Pascal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:25:06