XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager,
android開發之多個provider的解決方法:
下面的報錯針對android7.0及以上都是一個問題就是provider的authorities沒有對上。
看下報錯代碼:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object referenceat android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:604)at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:578)at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:416)at com.mchsdk.paysdk.utils.YhshUtils.install(YhshUtils.java:147)at com.mchsdk.paysdk.utils.YhshUtils.access$200(YhshUtils.java:53)at com.mchsdk.paysdk.utils.YhshUtils$1.onSuccess(YhshUtils.java:113)at com.lidroid.xutils.http.HttpHandler.onProgressUpdate(HttpHandler.java:218)at com.lidroid.xutils.task.PriorityAsyncTask$InternalHandler.handleMessage(PriorityAsyncTask.java:385)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loop(Looper.java:193)at android.app.ActivityThread.main(ActivityThread.java:6669)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:858)出現上面問題的原因很多:我說下我遇到的
我這邊是SDK有一份provider自己APP也有一份provide然后因為都是定義的android.support.v4.content.FileProvider雖然authorities不同但是經過我測試這樣后者的provider會被覆蓋,也就是說當后者的provider去查找authorities的時候查找的是前者的authorities導致找不到指定的路徑就報錯了,這種有多個provider的沖突問題解決辦法非常簡單
直接自定義Provider即可:
package com.xigu.zhenghesdk.demo;import android.support.v4.content.FileProvider;/*** @author Xiayiye5* 2020年8月5日11:09:51* 下面自定義FileProvider是為了解決游戲里面已定義了FileProvider的沖突問題* 如果你項目使用的最新androidX 庫,FileProvider導入使用:androidx.core.content.FileProvider* 如果你使用的非androidX庫,FileProvider導入使用:android.support.v4.content.FileProvider*/ public class XiaYiYe5FileProvider extends FileProvider {public XiaYiYe5FileProvider() {} }新建provider如上圖:然后在清單文件匯總配置下即可:
<!--配置Android7.0保存文件的路徑--><!--請將com.xigu.zhenghesdk.demo改成你自己的游戲包名--><providerandroid:name="com.xigu.zhenghesdk.demo.XiaYiYe5FileProvider"android:authorities="${applicationId}.xiayiye5"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/apk_paths" /></provider>個人建議:
1.上圖代碼中的authorities這個值一定要做到唯一不要和別的provider的authorities名字一樣
2.上圖中的resource資源路勁也盡量保持名字不重復例如我下載apk路勁定義的名字叫apk_paths
3.上圖authorities的值一定要和你安裝apk的值一致否則報錯如下圖一致:
總結
以上是生活随笔為你收集整理的XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager,的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DOM是什么意思
- 下一篇: 使用git命令提交代码到Github远程