AndroidManifest使用FileProvider合并错误

时间:2017-03-19 23:55:58

标签: android android-manifest

我正在尝试在其AndroidManifest.xml中使用具有此功能的库:

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.imagepicker.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>

我的应用AndroidManifest.xml中有相同的标记:

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="@string/FileProviderAuthority"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths"></meta-data>
    </provider>

所以它显然给出了Manifest合并错误:

Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed with multiple errors, see logs

建议在AndroidManifest.xml中“添加”工具:replace =“android:authorities”'来覆盖“。

所以我在我的应用AndroidManifest.xml中添加tools:replace="android:authorities"这样的话:

<application
    tools:replace="android:authorities"
    android:name=".appcontroller.AppController"
    android:allowBackup="true"
    android:hardwareAccelerated="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

然后我收到了这个错误:

Error:
tools:replace specified at line:25 for attribute android:authorities, but no new value specified

tools:replace="android.support.v4.content.FileProvider"也是如此。

我错过了什么?

4 个答案:

答案 0 :(得分:26)

要解决此问题,有两种选择:要么更改清单以使用与android.support.v4.content.FileProvider不同的类,要么创建一个PR /问题,要求lib的所有者更改他/她(这将是最好的情况)。

如果您想快速修复,只需创建一个扩展FileProvider的类,例如:

import android.support.v4.content.FileProvider;

public class MyFileProvider extends FileProvider {
}

并在清单文件中将其更改为:

<provider android:name=".MyFileProvider" ... >

答案 1 :(得分:11)

AndroidManifest.xml标记内添加到您的application文件中:

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.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"
            tools:replace="android:resource" />
    </provider>

答案 2 :(得分:2)

对于使用sdk 28及更高版本的用户,如果要迁移到androidx,解决​​方案是:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.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>

答案 3 :(得分:1)

由于您未更改提供程序中的任何值,因此无需将其包含在清单中。只需删除这些行。