使用ContentProvider进行白色标记

时间:2014-01-24 19:38:02

标签: android android-contentprovider white-labelling

我试图通过将我的Android应用程序项目更改为Android库项目,然后将库导入新的Android应用程序项目来为我的应用程序添加白色标签。

我遇到的问题是我的应用程序(读取:Library Project)包含ContentProvider。

当我尝试将新的Android应用程序项目安装到模拟器上时,控制台告诉我:

[2014-01-24 13:35:39 - WhitelabelTest] Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
[2014-01-24 13:35:39 - WhitelabelTest] Please check logcat output for more details.
[2014-01-24 13:35:39 - WhitelabelTest] Launch canceled!

根据logcat:

01-24 13:38:52.217: W/PackageManager(58): Can't install because provider name com.myapp.app.db.providers.MyProvider (in package com.example.whitelabeltest) is already used by com.myapp.app
01-24 13:38:52.227: W/PackageManager(58): Package couldn't be installed in /data/app/com.example.whitelabeltest-2.apk

这是否意味着您不能在同一设备上安装这两个应用程序,因为它们使用相同的ContentProvider?或者有办法解决这个问题吗?我是否需要在新的Android项目中使用新名称创建新的ContentProvider?

以下是我的WhitelabelTest项目的Manifest中列出的提供程序:

<provider
            android:name="com.myapp.app.db.providers.MessagesProvider"
            android:authorities="com.myapp.app.db.providers.MessagesProvider"
            android:exported="false" />

我尝试使用相同的结果更改name参数。

1 个答案:

答案 0 :(得分:1)

  

这是否意味着您不能在同一设备上安装这两个应用程序,因为它们使用相同的ContentProvider?

您不能在同一设备上安装这两个应用程序,因为它们都试图在android:authorities中声明相同的权限(<provider>)。对于给定的权限,只能有一个提供者。

这类似于您不能使用相同的package安装两个应用程序。

  

我是否需要在新的Android项目中使用新名称创建新的ContentProvider?

我首先考虑是否需要ContentProvider,如果不是,则可以放弃。

否则,ContentProvider的实现可能是库项目中的常见实现。但是,android:authorities必须是唯一的,因此ContentProvider的任何客户都需要知道用于联系合适的提供商的正确权限。