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?
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.
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
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