Android添加AAR库后遇FileProvider冲突问题求助
解决Android AAR库FileProvider冲突的具体步骤
1. 先添加tools命名空间
在你的AndroidManifest.xml根标签<manifest>里补充tools命名空间,否则tools:replace属性会直接失效:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="你的应用包名" xmlns:tools="http://schemas.android.com/tools"> <!-- 新增这一行 -->
2. 处理FileProvider authorities冲突
在<application>标签内部,显式声明FileProvider,覆盖两个库重复的authorities配置:
<provider android:name="androidx.core.content.FileProvider" android:authorities="你的应用包名.fileprovider" <!-- 替换成自己的应用包名,比如com.example.myapp.fileprovider --> android:exported="false" android:grantUriPermissions="true" tools:replace="android:authorities"> <!-- 后续元数据配置写在这里 --> </provider>
3. 处理FILE_PROVIDER_PATHS元数据冲突
在上面的<provider>标签内部,添加对应的<meta-data>标签,用tools:replace覆盖库中的重复配置:
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_provider_paths" tools:replace="android:resource" />
4. 创建file_provider_paths.xml文件
在项目的res/xml目录下(如果没有xml目录,右键res文件夹新建Directory,命名为xml)创建该文件,内容合并两个库需要的文件访问路径,基础版本如下:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-cache-path name="external_cache" path="." /> <files-path name="files" path="." /> <external-files-path name="external_files" path="." /> </paths>
关键注意点
- 必须显式在自己的Manifest里声明FileProvider,只加
tools:replace而不声明Provider是无效的,因为系统无法识别要覆盖哪个组件。 - 自定义的
authorities必须唯一,用自己的应用包名做后缀,能彻底避免和其他库的冲突。
内容的提问来源于stack exchange,提问作者aleksander frnczak
相关产品推荐
相关产品推荐

