我试图通过将我的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参数。
答案 0 :(得分:1)
这是否意味着您不能在同一设备上安装这两个应用程序,因为它们使用相同的ContentProvider?
您不能在同一设备上安装这两个应用程序,因为它们都试图在android:authorities
中声明相同的权限(<provider>
)。对于给定的权限,只能有一个提供者。
这类似于您不能使用相同的package
安装两个应用程序。
我是否需要在新的Android项目中使用新名称创建新的ContentProvider?
我首先考虑是否需要ContentProvider
,如果不是,则可以放弃。
否则,ContentProvider
的实现可能是库项目中的常见实现。但是,android:authorities
必须是唯一的,因此ContentProvider
的任何客户都需要知道用于联系合适的提供商的正确权限。