【问题标题】:ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" after androidx migrationClassNotFoundException:在 androidx 迁移后找不到类“android.support.v4.content.FileProvider”
【发布时间】:2018-11-10 11:30:09
【问题描述】:

我正在尝试迁移到 androidx。我在 Android Studio 中使用了迁移工具。当我这样做时,当我运行我的应用程序时,我会得到以下堆栈跟踪。

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.peerke.outdoorpuzzlegame.debug, PID: 10901
    java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" on path: DexPathList[[zip file "/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/lib/x86, /system/lib]]
        at android.app.ActivityThread.installProvider(ActivityThread.java:6376)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5932)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5847)
        at android.app.ActivityThread.access$1000(ActivityThread.java:198)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6649)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" on path: DexPathList[[zip file "/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/lib/x86, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at android.app.AppComponentFactory.instantiateProvider(AppComponentFactory.java:121)
        at androidx.core.app.CoreComponentFactory.instantiateProvider(CoreComponentFactory.java:62)
        at android.app.ActivityThread.installProvider(ActivityThread.java:6360)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5932) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5847) 
        at android.app.ActivityThread.access$1000(ActivityThread.java:198) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6649) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826) 

例外是正确的。 android.support.v4.content.FileProvider 在我的应用程序中不存在。但是 androidx.core.content.FileProvider 包含在我的应用程序中。 最大的问题是它为什么要加载旧版本的 FileProvider?

【问题讨论】:

    标签: java android android-studio androidx


    【解决方案1】:

    感谢@CommonsWare

    更多解释:

    怎么办,在AndroidManifest.xml中的<provider>中找到android.support.v4.FileProvider

    改成androidx.core.content.FileProvider

    【讨论】:

    【解决方案2】:

    ma​​nifiest.xml 文件中简单地改变这个

    <provider
            android:name="android.support.v4.content.FileProvider"
          .....
    </provider>
    

    给这个

    <provider
        android:name="androidx.core.content.FileProvider"
        ......
    </provider>
    

    或者简单

    • 转到重构(Studio -> 菜单 -> 重构)
    • 点击迁移到 AndroidX。
    • 它正在工作。

    【讨论】:

      【解决方案3】:

      为什么要加载旧版本的FileProvider?

      根据堆栈跟踪,您可能仍在使用清单中 &lt;provider&gt; 元素中的旧包名称。

      【讨论】:

      • 你拯救了我的一天!
      • 我在 Manifest 中有提供者 - @CommonsWare
      • @CommonsWare ------ 无法获取提供者 android.support.v4.content.FileProvider: java.lang.ClassNotFoundException: 找不到类“android.support.v4.content. FileProvider" 和 App Force 关闭
      • @ArnoldBrown:显然,您缺少具有该类的依赖项。在 Android Studio 的外部库列表(项目树的底部)中查看包含 com.android.support:support-compat 的某些版本。如果没有,请为您使用的任何版本的支持库添加一个依赖项。如果您在外部库中已经有 com.android.support:support-compat,但您正在使用 multidex,则需要配置 multidex,以便 FileProvider 在主 DEX 文件中。
      • 我们的清单中没有旧的包名。我们仍然面临这个问题
      猜你喜欢
      • 1970-01-01
      • 2018-06-01
      • 2020-07-12
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 2019-02-04
      • 1970-01-01
      相关资源
      最近更新 更多