如何在清单中拥有相同类型的多个提供商?由于cordova相机插件带来了文件提供商,我们的应用程序无法再构建。在清单中我们有以下内容:
<provider android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true" android:name="android.support.v4.content.FileProvider">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/>
</provider>
<provider android:authorities="com.our.app.dev.fileprovider" android:exported="false" android:grantUriPermissions="true" android:name="android.support.v4.content.FileProvider">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_provider_paths"/>
</provider>
第一个条目来自相机插件,第二个来自我们的一个插件。
在构建期间,会出现以下错误:
AndroidManifest.xml:44:5-46:16 Error:
Element provider#android.support.v4.content.FileProvider at AndroidManifest.xml:44:5-46:16 duplicated with element declared at AndroidManifest.xml:41:5-43:16
谢谢!
答案 0 :(得分:3)
我认为这不是一个cordova问题,而是在android构建过程中。至少我可以在简单的Android Studio和Gradle设置中重现它:
似乎android没有两个具有相同名称属性的标签。我不明白为什么这是一个问题,只要你有不同的权限,它应该工作正常。但这也导致了一个解决方案:
在您的插件中(或您想要使用的插件的自己的分支)。您创建自己的FileProvider.java,它只是扩展了原始的android.support.v4.content.FileProvider
package com.our.app.dev;
public class FileProvider extends android.support.v4.content.FileProvider {
}
在您的插件配置中,您链接到此 FileProvider,它现在具有不同的包名称,从而避免了此问题。希望这有用,对我来说似乎可以做到这一点。