我在 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>
我有一个清单并为 2 种风格定义了 2 个提供者
这意味着,如果您以某种方式成功安装了这两个应用程序,那么您总共将拥有四个提供商:
应用程序 | 味道 | 当局 |
---|---|---|
1 | 1 | 和
|
2 | 2 | 和
|
这是行不通的,因为您不能同时安装两个提供程序并声明相同的权限。
我想你想要的是:
应用程序 | 味道 | 当局 |
---|---|---|
1 | 1 |
|
2 | 2 |
|
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>
元素)。