如何在免费和付费版本的应用程序中使用相同的ContentProvider权限?

时间:2011-05-22 16:21:34

标签: android android-manifest android-contentprovider

我已开始使用Android Library Projects来合并我的付费和免费版本代码。

我使用ContentProvider遇到了问题。由于ContentProvider是在库类中定义的,因此两个应用程序都使用相同的权限。这意味着由于INSTALL_FAILED_CONFLICTING_PROVIDER错误,android会阻止安装第二个应用程序(按任意顺序)。

05-22 11:14:40.563: WARN/PackageManager(102): Can't install because provider name com.cfms.android.podcast (in package com.cfms.android.podcastlite) is already used by com.cfms.android.podcastpaid
05-22 11:14:40.563: WARN/PackageManager(102): Package couldn't be installed in /data/app/com.cfms.android.podcastlite-2.apk

我该如何处理这个问题?理想情况下,我希望每个应用程序版本的权限都相同,因此我不必在公共代码库中放入一堆异常。如果那是不可能的,我该怎么办呢?

2 个答案:

答案 0 :(得分:6)

在同一设备上使用相同权限的不同提供商,根本不可能有两个应用程序。

http://hustleplay.wordpress.com/2010/02/28/android-install_failed_conflicting_provider/

android duplicate provider authority

我会在每个应用程序中创建一个不同的字符串资源,然后传递给库以创建具有适当权限的提供程序。

答案 1 :(得分:0)

你可以试试这样的吗?

http://ncsoftworks.com/forums/discussion/6/sharedpreferences-between-applications

也不是内容提供商的权限只是私有的嵌入式linux文件夹名称?并不是内容提供者只是该私人文件夹中的SQLite数据库文件?

我们不能在应用程序之间共享相同的文件夹,只要我们使用相同的密钥和相同的应用程序包名称对两个应用程序进行签名,从而创建共享用户ID?

无论如何,我现在只是在大声思考。我将不得不尝试这个。我只是发布这个以节省一些时间,以防有人发现我的假设中的缺陷(在我有时间做实验之前)。

注意:我说的是应用程序包名称,而不是活动包名称。据我了解,Android应用程序通常包含两个软件包名称(尽管Eclipse New项目向导通常会标记两个具有相同名称的软件包,从而产生只有一个软件包名称的印象)