如何解决Android Manifest合并失败错误?附合并错误详情
这个问题我太熟了!本质是你项目里的两个依赖库(gallerymodule和easyphotopicker)都声明了FileProvider,但它们的android:authorities属性值不一样,导致清单合并时“打架”了。直接按下面的步骤就能搞定:
第一步:给Manifest根标签添加tools命名空间
打开你的主项目AndroidManifest.xml,在最外层的<manifest>标签里加上tools命名空间,这样才能使用tools:replace属性:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" <!-- 新增这行 --> package="com.example.parij.myschoolcomm">第二步:修改FileProvider声明,添加tools:replace
找到你主项目里的FileProvider标签(如果是依赖库自动引入的,你可以在主Manifest里重新声明覆盖),添加tools:replace="android:authorities",同时把android:authorities改成你自己的唯一值(建议用应用包名+自定义后缀,避免和其他应用冲突):<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.parij.myschoolcomm.custom.fileprovider" <!-- 改成你的唯一值 --> android:exported="false" android:grantUriPermissions="true" tools:replace="android:authorities"> <!-- 新增这行,强制覆盖冲突属性 --> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>第三步:同步并编译项目
完成修改后,点击Android Studio的「Sync Project with Gradle Files」按钮,重新编译项目,这个合并冲突就能解决了。
补充说明
tools:replace="android:authorities"的作用是告诉清单合并工具:强制使用主Manifest里设置的authorities值,覆盖所有依赖库中的同名属性。另外要注意,android:authorities的值必须全局唯一,用自己的应用包名做前缀是最稳妥的方式,能避免和其他应用的FileProvider产生冲突。
内容的提问来源于stack exchange,提问作者Atharva Karanje




