Сбои Android из-за android.support.v4.content.FileProvider.parsePathStrategy - PullRequest
2 голосов
/ 01 апреля 2019

Я только что проверял ANR и сбои одного из моих приложений для Android в консоли Google Play.

Я случайно решил включить переключатель «Показать скрытые» на вкладке «Сбои» (понятия не имею, что означает скрытый, а не скрытый, и это первый раз, когда я его включил), и я увидел в верхней части списка сбой, который происходит сотни раз в день и затрагивает сотни пользователей.

enter image description here

Я понял из трассировки стека, что это связано с библиотекой поддержки 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>

1 Ответ

2 голосов
/ 05 апреля 2019

Я, наконец, отследил причину этих сбоев, которая, по-видимому, вызвана конфликтом имен полномочий провайдера.

Я изменил имена полномочий на уникальные, и теперь выпустил их как обновленнуюв Play Store перестали сообщаться о сбоях в этой последней версии:

android:authorities="${applicationId}.camera.provider
android:authorities="${applicationId}.emailcomposer.provider
android:authorities="${applicationId}.localnotification.provider

Для справки я нашел эту информацию в этом выпуске Github: https://github.com/katzer/cordova-plugin-local-notifications/issues/1664

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...