Android 具有ContentProvider的模块

Android 具有ContentProvider的模块,android,module,android-contentprovider,Android,Module,Android Contentprovider,我正在使用图书馆,问题始于: 托盘基于ContentProvider。ContentProvider需要一个唯一的 权威。当您对多个应用程序使用同一权限时,您将 由于与的权限冲突,无法安装应用程序 错误消息: 失败[安装\u失败\u冲突\u提供程序] 因为我以前没有读过这篇文章,所以我使用这个库来解决多线程SharedReference的问题,这个项目必须在一个模块中才能在多个项目中使用 在使用此模块安装每个应用程序时,抛出故障[安装\u失败\u冲突\u提供程序]异常 因为第一个安装的应用程序中

我正在使用图书馆,问题始于:

托盘基于ContentProvider。ContentProvider需要一个唯一的 权威。当您对多个应用程序使用同一权限时,您将 由于与的权限冲突,无法安装应用程序 错误消息:

失败[安装\u失败\u冲突\u提供程序]

因为我以前没有读过这篇文章,所以我使用这个库来解决多线程SharedReference的问题,这个项目必须在一个模块中才能在多个项目中使用

在使用此模块安装每个应用程序时,抛出故障[安装\u失败\u冲突\u提供程序]异常

因为第一个安装的应用程序中已经使用了权限


问题是:
  • 如何跳过已安装模块的安装?(安装应用程序的其余部分,因此错误将消失)

  • 否则,我如何组织项目?能够安装使用具有ContentProvider库的模块构建的多个应用程序


固定 对于需要类似功能的用户,请遵循以下步骤:

步骤1。我在主项目中配置了托盘库“其余应用程序需要” (承载数据库首选项的应用程序)

步骤2。我从存储库中提取了与托盘内容提供者连接所需的类,它们是:

  • AbstractTrayPreference.java
  • ContentProviderStorage.java
  • ItemNotFoundException.java
  • Migration.java
  • OnTrayPreferenceChangeListener.java
  • PreferenceAccessor.java
  • Preferences.java
  • PreferenceStorage.java
  • SqliteHelper.java
  • TrayContract.java
  • TrayDBHelper.java
  • TrayException.java
  • TrayItem.java
  • TrayPreferences.java
  • TrayProviderHelper.java
  • TrayRuntimeException.java
  • TrayStorage.java
  • TrayUri.java
  • ErrorTypeException.java
在通用模块的新包中

步骤3。I通过常量变量硬编码机构名称:

这必须与主项目配置相匹配:

// bild.gradle of Main Project
resValue "string", "tray__authority", "<your.app.package>.tray"


// TrayContract.java of Module
@NonNull
private static String getAuthority(@NonNull final Context context) {
    return TextUtils.isEmpty(sTestAuthority) ?
            AppConstant.TRAY_AUTHORITY: // <-- this one = <your.app.package>.tray
            sTestAuthority;
}
//主项目的bild.gradle
resValue“字符串”、“托盘权限”、“托盘”
//模块的TrayContract.java
@非空
私有静态字符串getAuthority(@NonNull final Context){
返回TextUtils.isEmpty(stestaauthority)?
AppConstant.u权限://
// etc
import <your.app.package>.tray.TrayPreferences;
// etc
public class AppPreferencesManager extends TrayPreferences {
// etc
}