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.co
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 reference
at 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改成你自己的游戏包名-->
<provider
android:name="com.xigu.zhenghesdk.demo.XiaYiYe5FileProvider"
android:authorities="${applicationId}.xiayiye5"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/apk_paths" />
</provider>
个人建议:
1.上图代码中的authorities这个值一定要做到唯一不要和别的provider的authorities名字一样
2.上图中的resource资源路劲也尽量保持名字不重复例如我下载apk路劲定义的名字叫apk_paths
3.上图authorities的值一定要和你安装apk的值一致否则报错如下图一致:
更多推荐
所有评论(0)