Resolve android. support. v4.content. FileProvide not found

  • 2021-11-29 08:33:48
  • OfStack

After adding the following passage in AndroidManifest. xml,


<provider
      android:name="android.support.v4.content.FileProvider"
      android:authorities="com.boxin.forklift.fileprovider"
      android:exported="false"
      android:grantUriPermissions="true">
      <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
    </provider>

The following error appears in the Android version 4.4. 2 mobile phone


E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.boxin.forklift, PID: 7106
  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.boxin.forklift-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.boxin.forklift-1, /vendor/lib, /system/lib, /data/datalib]]
    at android.app.ActivityThread.installProvider(ActivityThread.java:5045)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4631)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4571)
    at android.app.ActivityThread.access$1700(ActivityThread.java:143)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5291)
    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:849)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
    at dalvik.system.NativeStart.main(Native Method)
   Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" on path: DexPathList[[zip file "/data/app/com.boxin.forklift-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.boxin.forklift-1, /vendor/lib, /system/lib, /data/datalib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
    at android.app.ActivityThread.installProvider(ActivityThread.java:5030)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4631) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4571) 
    at android.app.ActivityThread.access$1700(ActivityThread.java:143) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5291) 
    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:849) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
    at dalvik.system.NativeStart.main(Native Method) 

Solution:

1: It may be the reason why MultiDex subcontract is added but not initialized. Rewrite attachBaseContext function in Application and initialize MultiDex.

1) First modify the Gradle configuration file to enable MultiDex and include MultiDex support:


   defaultConfig {
     multiDexEnabled true
  }

Complete writing of the project:


android {
  compileSdkVersion 27
  defaultConfig {
    applicationId "com.boxin.forklift"
    minSdkVersion 19
    targetSdkVersion 27
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
  }

2) Modify BoXinApplication and override attachBaseContext method

The default naming of BoxinApplication is: BaseApplication


@Override 
protected void attachBaseContext(Context base) { 
super.attachBaseContext(base); 
MultiDex.install(base); 
}

After joining, successfully run the project to the mobile phone.


Related articles: