【问题标题】:Android crashes due to android.support.v4.content.FileProvider.parsePathStrategy由于 android.support.v4.content.FileProvider.parsePathStrategy Android 崩溃
【发布时间】:2019-04-01 17:20:02
【问题描述】:

我只是在 Google Play 控制台中检查我的一个 Android 应用程序的 ANR 和崩溃。

我随机选择打开崩溃选项卡上的“显示隐藏”开关(不知道隐藏和不隐藏是什么意思,这是我第一次打开它),我在列表顶部看到一个崩溃每天发生数百次,影响数百名用户。

我从堆栈跟踪中收集到它与 Android 支持库有关,但我不知道原因是什么,到目前为止,谷歌搜索堆栈跟踪行并没有发现任何有用的信息。

当我在 3 月 22 日发布一个新的次要应用版本时才开始发生这种情况,但从我在 repo 历史中可以看到,我所做的更改非常小,所以不要解释这一点。

这是堆栈跟踪:

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)

我认为 this is the line 在 Android 支持库的堆栈跟踪中被引用。

任何想法可能是什么原因?

更新

更多挖掘,我在AndroidManifest.xml 内部<application> 中找到这3 个条目:

<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>

【问题讨论】:

标签: android cordova crash cordova-plugins android-support-library


【解决方案1】:

我终于找到了这些崩溃的原因,这似乎是由提供商权限名称冲突引起的。

我将当局的名称更改为唯一,现在已将其作为更新发布在 Play 商店中,在此最新版本中不再报告崩溃:

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

【讨论】:

  • 感谢您的照顾!真正有用的调查。
  • @DaveAlden 感谢您提供此答案,只是一个简单的问题,在 Manifest 文件中进行此更改时,您是否还必须在其他地方更改插件代码?如果我更改权限,我似乎需要更改 CameraLauncher.java 和 AssetUtil.java 文件,这是否正确?
  • 是的,源代码也需要更改,例如参见this commit
猜你喜欢
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 2016-04-06
  • 1970-01-01
  • 2014-08-03
  • 2011-11-09
  • 1970-01-01
相关资源
最近更新 更多