web-dev-qa-db-fra.com

ClassNotFoundException: la classe "Android.support.v4.content.FileProvider" n'a pas été trouvée après la migration androidx

J'essaie de migrer vers androidx. J'ai utilisé l'outil de migration dans Android Studio. Lorsque je le fais, j'obtiens le stacktrace suivant lors de l'exécution de mon application.

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) 

L'exception est correcte. Android.support.v4.content.FileProvider n'existe pas dans mon application. Mais androidx.core.content.FileProvider est inclus dans mon application. La grande question est pourquoi veut-il charger l'ancienne version de FileProvider?

22
Peter Fortuin

pourquoi veut-il charger l'ancienne version de FileProvider?

Selon la trace de la pile, vous utilisez peut-être encore l'ancien nom du paquet dans le fichier <provider> élément dans le manifeste.

24
CommonsWare

Merci à @CommonsWare

Plus d'explication:

Que faire, trouvez le Android.support.v4.FileProvider dans votre <provider> dans AndroidManifest.xml.

Changez-le en androidx.core.content.FileProvider

53
Yosi Pramajaya

Dans manifiest.xml le fichier change simplement ceci

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

À celui-ci

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

ou simplement

  • Aller à Refactor (Studio -> Menu -> Refactor)
  • Cliquez sur le bouton Migrer vers AndroidX. ça marche
  • ça marche.
12
Attaullah