项目里有多个module应用FileProvider时,编译器在编译项目合并 Manifest文件时候就抛出了provider冲突问题。定义FileProvider时,用的都是v4包提供的FileProvider类来读写文件,所以会导致冲突。
那么多个FileProvider造成的冲突该怎么解决,下面介绍两种处理方法以供参考。
代码示例:
<application>
...
<!-- 其他 -->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<!-- 广点通 -->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/gdt_file_path" />
</provider>
...
</application>
处理方法:
① 合并xml文件
1)把两个FileProvider
的配置引用文件file_paths.xml
和gdt_file_path.xml
合并成一个new_file_paths.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 广点通 -->
<external-path
name="gdt_sdk_download_path"
path="GDTDOWNLOAD" />
<external-cache-path
name="gdt_sdk_download_path1"
path="com_qq_e_download" />
<cache-path
name="gdt_sdk_download_path2"
path="com_qq_e_download" />
<!-- 其他 -->
<external-files-path
name="external_files" path="."/>
</paths>
2)在 Manifest文件中重新配置 FileProvider;
<application>
...
<!-- 合并后 -->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/new_file_paths" />
</provider>
...
</application>
② 重写FileProvider
1)重写v4包提供的 FileProvider类:
public class GDTFileProvider extends FileProvider{
}
2)在 Manifest文件中重新配置 FileProvider;
<application>
...
<!-- 其他 -->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<!-- 广点通 -->
<provider
android:name=".utils.GDTFileProvider"//自定义的FileProvider的路径
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="name,authorities,exported,grantUriPermissions">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/gdt_file_path"
tools:replace="name,resource" />
</provider>
...
</application>
网友评论