list 中怎么可能有多个相同类型的提供者?由于cordova相机插件带来了文件提供商,因此无法再构建我们的应用程序。在 list 中,我们具有以下内容:

<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

谢谢!

最佳答案

我认为这不是 Cordova 问题,而是在android构建过程中。至少我可以在简单的Android Studio和Gradle设置中重现它:

似乎android不能通过两个具有相同name属性的标签来实现。我不明白为什么这是个问题,只要您拥有不同的权限,它就可以正常工作。但这也导致一个解决方案:

在您的插件中(或您要使用的插件的自己的分支中)。您创建自己的FileProvider.java,它只是扩展了原始的android.support.v4.content.FileProvider

package com.our.app.dev;

public class FileProvider extends android.support.v4.content.FileProvider {
}

在您的插件配置中,您可以链接到 FileProvider的,该文件提供器现在具有不同的程序包名称,从而避免了此问题。希望这行得通,对我来说似乎可以解决问题。

10-07 19:14
查看更多