我正在开发一组仅在某些品牌中独树一帜的应用(想想不同的运动队);但是,我遇到了一个问题,我为所有特定品牌的应用程序使用一个库项目,并希望对所有这些应用程序使用相同的 ContentProvider。当我创建 ContentProvider 时,我将 AUTHORITY 声明为类中的常量(根据开发示例代码),并且我在 list 文件中的每个特定应用程序中使用相同的权限。看起来我无法在每个应用程序中使用相同的权限,因为在尝试安装第二个应用程序时出现此错误(我安装了一个品牌的应用程序很好,但第二次安装):
WARN/PackageManager(66): Can't install because provider name com.xxx.Provider (in package com.xxx) is already used by com.zzz
我尝试了几种方法,但似乎都不起作用。我还没有完成的一个想法是创建一个库 jar 并忽略我拥有的 Provider 类并在每个特定的应用程序中对其进行自定义。关于如何在不诉诸于此的情况下解决此问题的任何想法?
最佳答案
这是一个老问题,但我最近正在考虑做类似的事情。有了 Build 风格,现在真的很简单。
在 gradle 文件中指定 BuildConfigField:
productFlavors {
free {
applicationId "com.example.free"
buildConfigField 'String', 'AUTHORITY', '"com.example.free.contentprovider"'
}
paid {
applicationId "com.example.paid"
buildConfigField 'String', 'AUTHORITY', '"com.example.paid.contentprovider"'
}
在 list 中指定提供者权限:
<provider
android:name=".ContentProvider"
android:authorities="${applicationId}.contentprovider" />
使用 BuildConfigField 变量在提供者中设置权限:
public static final String AUTHORITY = BuildConfig.AUTHORITY
关于android - 多个应用程序使用相同的内容提供商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3306639/