Android 由于 android.support 而崩溃。v4.content.FileProvider.parsePathStrategy
Android crashes due to android.support.v4.content.FileProvider.parsePathStrategy
我只是在 Google Play 控制台中检查我的一个 Android 应用程序的 ANR 和崩溃。
我随机选择打开“崩溃”选项卡上的 "Show hidden" 开关(不知道隐藏与不隐藏的含义,这是我第一次打开它),我在列表顶部看到每天发生数百次并影响数百名用户的崩溃。
我从堆栈跟踪中收集到它与 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 支持库的堆栈跟踪中被引用。
任何想法可能是什么原因?
更新
进一步挖掘,我在 <application>
内的 AndroidManifest.xml
中找到了这 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>
我终于找到了这些崩溃的原因,这似乎是由提供者授权名称的冲突引起的。
我将权限名称更改为唯一,现在已将其作为更新发布在 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
我只是在 Google Play 控制台中检查我的一个 Android 应用程序的 ANR 和崩溃。
我随机选择打开“崩溃”选项卡上的 "Show hidden" 开关(不知道隐藏与不隐藏的含义,这是我第一次打开它),我在列表顶部看到每天发生数百次并影响数百名用户的崩溃。
我从堆栈跟踪中收集到它与 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 支持库的堆栈跟踪中被引用。
任何想法可能是什么原因?
更新
进一步挖掘,我在 <application>
内的 AndroidManifest.xml
中找到了这 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>
我终于找到了这些崩溃的原因,这似乎是由提供者授权名称的冲突引起的。
我将权限名称更改为唯一,现在已将其作为更新发布在 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