由于多个FileProviders而无法安装应用程序

问题描述 投票:0回答:1

我在 build.gradle 中定义了 2 个产品风格,并为每个风格创建了 2 个不同的文件提供程序。当我在设备上安装另一个应用程序风格时,它似乎会引起冲突。

我尝试安装时遇到的错误:

The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER Installation failed due to: 'Error code: 'INSTALL_FAILED_CONFLICTING_PROVIDER', message='INSTALL_FAILED_CONFLICTING_PROVIDER: Scanning Failed.: Can't install because provider name com.flavor2.app.fileprovider2 (in package com.flavor2.app) is already used by com.flavor1.app''

清单中我的提供商:

<provider
    android:authorities="com.flavor1.app.fileprovider1"
    android:name="androidx.core.content.FileProvider"
    android:grantUriPermissions="true"
    android:exported="false">

    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/fileprovider1" />
</provider>

<provider
    android:authorities="com.flavor2.app.fileprovider2"
    android:name="androidx.core.content.FileProvider"
    android:grantUriPermissions="true"
    android:exported="false">

    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/fileprovider2" />
</provider>
java android xml kotlin android-manifest
1个回答
0
投票

我有一个清单并为 2 种风格定义了 2 个提供者

这意味着,如果您以某种方式成功安装了这两个应用程序,那么您总共将拥有四个提供商:

应用程序 味道 当局
1 1
com.flavor1.app.fileprovider1
com.flavor2.app.fileprovider2
2 2
com.flavor1.app.fileprovider1
com.flavor2.app.fileprovider2

这是行不通的,因为您不能同时安装两个提供程序并声明相同的权限。

我想你想要的是:

应用程序 味道 当局
1 1
com.flavor1.app.fileprovider1
2 2
com.flavor2.app.fileprovider2

IOW,Flavor 1 应用程序具有

com.flavor1
权限,Flavor 2 应用程序具有
com.flavor2
权限。

要实现这一点,您总共需要三个清单:

  • 您的
    flavor1
    源集中的一个,其中包含
    com.flavor1.app.fileprovider1
    <provider>
    ,否则为空
    <application>
  • 您的
    flavor2
    源集中的一个,其中包含
    com.flavor2.app.fileprovider2
    <provider>
    ,否则为空
    <application>
  • 您的
    main
    源集中的一个,包含其他所有内容

此示例项目演示了具有带有清单的源集,但在我的情况下,它具有不同的

<queries>
元素(它们是
<manifest>
的子元素,因此您不会看到空的
<application>
元素)。

© www.soinside.com 2019 - 2024. All rights reserved.