【问题标题】:How to use same ContentProvider authority in free and paid versions of app?如何在免费和付费版本的应用程序中使用相同的 ContentProvider 权限?
【发布时间】:2011-08-30 15:48:22
【问题描述】:

我已经开始使用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

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

【问题讨论】:

    标签: android android-manifest android-contentprovider


    【解决方案1】:

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

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

    android duplicate provider authority.

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

    【讨论】:

    • 这就是我害怕的。这也意味着我必须将所有基于静态最终权限的变量重新设计为运行时初始化。主要是我试图避免的。
    【解决方案2】:

    你能试试这样的吗?

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

    内容提供者的权限不就是一个私有的嵌入式 linux 文件夹名称吗?内容提供者不只是该私有文件夹中的 SQLite 数据库文件吗?

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

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

    注意:我说的是应用包名,不是活动包名。据我了解,Android 应用程序通常包含两个包名(尽管 Eclipse 新建项目向导通常将两个包标记为相同的名称,从而造成只有一个包名的印象)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 2016-04-12
      • 2015-09-09
      • 2014-06-19
      • 1970-01-01
      • 2017-02-14
      相关资源
      最近更新 更多