使用Cordova在manifest.xml中复制了FileProvider时出错

时间:2016-11-22 15:47:46

标签: android cordova

如何在清单中拥有相同类型的多个提供商?由于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

谢谢!

1 个答案:

答案 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,它现在具有不同的包名称,从而避免了此问题。希望这有用,对我来说似乎可以做到这一点。