ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" after androidx migration

JavaAndroidAndroid StudioAndroidx

Java Problem Overview


I'm trying to move to migrate to androidx. I used the migration tool in Android Studio. When I do this I get the following stacktrace when I run my app.

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:5932at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5847at android.app.ActivityThread.access$1000(ActivityThread.java:198at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637at android.os.Handler.dispatchMessage(Handler.java:106at android.os.Looper.loop(Looper.java:164at android.app.ActivityThread.main(ActivityThread.java:6649at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826

The exception is correct. android.support.v4.content.FileProvider doesn't exist in my app. But androidx.core.content.FileProvider is included in my app. The big question is why does it want to load the old version of FileProvider?

Java Solutions


Solution 1 - Java

Thanks to @CommonsWare

More explanation:

What to do, find the android.support.v4.FileProvider in your <provider> in AndroidManifest.xml.

Change it to androidx.core.content.FileProvider

Solution 2 - Java

In manifiest.xml file simply change this

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

To this one

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

Or Simply

  • Go to Refactor (Studio -> Menu -> Refactor)
  • Click the Migrate to AndroidX.
  • it's working.

Solution 3 - Java

> why does it want to load the old version of FileProvider?

Based on the stack trace, perhaps you are still using the old package name in the <provider> element in the manifest.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPeter FortuinView Question on Stackoverflow
Solution 1 - JavaYosi PramajayaView Answer on Stackoverflow
Solution 2 - JavaAttaullahView Answer on Stackoverflow
Solution 3 - JavaCommonsWareView Answer on Stackoverflow