Я только что проверял ANR и сбои одного из моих приложений для Android в консоли Google Play.
Я случайно решил включить переключатель «Показать скрытые» на вкладке «Сбои» (понятия не имею, что означает скрытый, а не скрытый, и это первый раз, когда я его включил), и я увидел в верхней части списка сбой, который происходит сотни раз в день и затрагивает сотни пользователей.
Я понял из трассировки стека, что это связано с библиотекой поддержки Android, но я не знаю, в чем причина, и пока что поиск линий трассировки стека ничего полезного не дал.
Это начало происходить только тогда, когда я выпустил новую минорную версию приложения 22 марта, но из того, что я вижу в истории репо, сделанные мной изменения очень незначительны, поэтому не объясняйте это.
Вот трассировка стека:
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)
Я думаю, это строка , на которую ссылается трассировка стека в библиотеке поддержки Android.
Есть идеи, что может быть причиной?
Update
Еще несколько копаний, и я нахожу эти 3 записи в AndroidManifest.xml
внутри <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"/>
В res/xml/
есть 3 соответствующих файла:
- provider_paths.xml
- localnotification_provider_paths.xml
- emailcomposer_provider_paths.xml
Это проект Apache Cordova, поэтому эти записи генерируются:
Каждый файл XML содержит одинаковое содержимое:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>