J'ai migré mon application vers androidx et ça ne déjeune pas sur API Level -21. Application lève cette exception:
10-08 09:42:50.930 11346-11346/com.example.test E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test, PID: 11346
Java.lang.RuntimeException: Unable to get provider androidx.core.content.FileProvider: Java.lang.ClassNotFoundException: Didn't find class "androidx.core.content.FileProvider" on path: DexPathList[[Zip file "/data/app/com.example.test-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.test-1, /vendor/lib, /system/lib]]
at Android.app.ActivityThread.installProvider(ActivityThread.Java:5121)
at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4713)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4596)
at Android.app.ActivityThread.access$1600(ActivityThread.Java:169)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1340)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:146)
at Android.app.ActivityThread.main(ActivityThread.Java:5487)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1283)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "androidx.core.content.FileProvider" on path: DexPathList[[Zip file "/data/app/com.example.test.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.test-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:67)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:497)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:457)
at Android.app.ActivityThread.installProvider(ActivityThread.Java:5106)
at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4713)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4596)
at Android.app.ActivityThread.access$1600(ActivityThread.Java:169)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1340)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:146)
at Android.app.ActivityThread.main(ActivityThread.Java:5487)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1283)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1099)
at dalvik.system.NativeStart.main(Native Method)
Et voici la définition du fournisseur dans le fichier manifeste:
<provider
Android:name="androidx.core.content.FileProvider"
Android:authorities="${applicationId}.fileProvider"
Android:exported="false"
Android:grantUriPermissions="true">
<meta-data
Android:name="Android.support.FILE_PROVIDER_PATHS"
Android:resource="@xml/provider_paths" />
</provider>
Il n'exécute aucun code dans mon application! et se bloque dès qu'il est déjeuné! Sur le dernier niveau API, cela fonctionne bien. Toute suggestion serait utile, merci d'avance.
Il semble que cette erreur provienne d'une configuration incomplète de MultiDex dans votre application. Ici vous pouvez trouver le même problème et ici est un article qui y répond.
Je vous suggère de vérifier les éléments suivants (l'extension de la classe App m'a aidé):
Votre classe Application (App.class, par exemple, si vous l'utilisez) doit être étendue à partir de la classe MultiDexApplication:
public class BaseApplication extends MultiDexApplication {}
ou si vous n'utilisez pas la classe Application, vérifiez votre manifeste:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.Android.multidex.myapplication">
<application
...
Android:name="Android.support.multidex.MultiDexApplication">
...
</application>
</manifest>