我正在尝试在其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"
也是如此。
我错过了什么?
答案 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)
由于您未更改提供程序中的任何值,因此无需将其包含在清单中。只需删除这些行。