You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何解决Android Manifest合并失败错误?附合并错误详情

解决清单合并中FileProvider Authorities冲突的方案

这个问题我太熟了!本质是你项目里的两个依赖库(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

火山引擎 最新活动