I was just checking the ANRs & Crashes for one of my Android apps in the Google Play console.
I randomly chose to turn on the "Show hidden" switch on the Crashes tab (no idea what hidden vs not hidden means and it's the first time I turned it on) and I saw at the top of the list a crash which is happening hundreds of times per day and affecting hundreds of users.
I gather from the stack trace it's related to the Android Support Library, but I have no idea what the cause is and so far Googling the stack trace lines hasn't turned up anything useful.
It only started happening when I released a new minor app version on March 22, but from what I can see in the repo history, the changes I made are very minor so don't explain this.
Here's the stacktrace:
java.lang.NullPointerException in android.support.v4.content.FileProvider.parsePathStrategy
java.lang.RuntimeException:
at android.app.ActivityThread.installProvider (ActivityThread.java:6643)
at android.app.ActivityThread.installContentProviders (ActivityThread.java:6185)
at android.app.ActivityThread.handleInstallProvider (ActivityThread.java:3452)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1939)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:193)
at android.app.ActivityThread.main (ActivityThread.java:6923)
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:870)
Caused by: java.lang.NullPointerException:
at android.support.v4.content.FileProvider.parsePathStrategy (FileProvider.java:584)
at android.support.v4.content.FileProvider.getPathStrategy (FileProvider.java:558)
at android.support.v4.content.FileProvider.attachInfo (FileProvider.java:376)
at android.app.ActivityThread.installProvider (ActivityThread.java:6638)
I think this is the line being referred to in the stack trace in the Android Support library.
Any ideas what could be the cause?
Update
Some more digging and I find these 3 entries in AndroidManifest.xml
inside <application>
:
<provider android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true" android:name="android.support.v4.content.FileProvider">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>
</provider>
<provider android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true" android:name="de.appplant.cordova.emailcomposer.Provider">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/emailcomposer_provider_paths"/>
</provider>
<provider android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true" android:name="de.appplant.cordova.plugin.notification.util.AssetProvider">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/localnotification_provider_paths"/>
There are 3 corresponding files in res/xml/
:
- provider_paths.xml
- localnotification_provider_paths.xml
- emailcomposer_provider_paths.xml
This is an Apache Cordova project, so those entries are genenerated by:
Each XML file contains the same contents:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>