首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android复制权限

Android复制权限
EN

Stack Overflow用户
提问于 2015-09-08 13:47:26
回答 2查看 2.8K关注 0票数 2

我有一个免费和专业版本的应用程序。当用户使用免费后购买pro时,pro版本建议一个迁移助手将数据从免费导入到pro版本。

我添加了一个自定义权限来保护免费版本数据。这两个版本都有在其清单中声明的权限,只有专业版本才有使用权限。

它在预Lollipop设备上工作得很好,但是在Lollipop上,如果我尝试在安装免费版本时安装pro版本,我会收到一个INSTALL_FAILED_DUPLICATE_PERMISSION错误消息。如果我用相同的键(例如,在调试中)对两个版本进行签名,但是我没有在Play Store上签名,并且它不能被更改,它就能工作。

那么,是否有任何解决方案,还是棒棒糖的权限被破坏了??

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-08 14:12:42

有什么办法吗

在您的情况下,您可能能够逃脱Derek Fung's approach,因为有一个明确的安装顺序(如果有的话,人们将安装免费应用程序后安装付费应用)。

或者,您可以跳过权限,因为在这种情况下,有两个应用程序需要相互通信。你知道那些应用程序是什么,你也知道它们的签名密钥。作为IPC工作的一部分执行您自己的验证:

  • 使用Binder.getCallingUid()获取调用应用程序的UID。
  • 使用PackageManager及其getPackagesForUid()查找与UID关联的应用程序ID。在您的情况下,应该只有一个,您可以确认应用程序ID是期望值。
  • 使用 class (或者只是获取它的代码)来验证调用应用程序的签名键是否符合预期值。

棒棒糖的权限被破坏了吗?

您想要的行为--任何应用程序都可以定义任何其他应用程序的权限--是dreadful from a security standpoint

这种“功能”还会阻止创建/使用第三方内容提供者,因为如果您的应用程序是先安装的,则需要有权限声明。

自定义权限是为有明确的安装顺序的情况而设计的(例如,预先安装的应用程序、主机和插件)。自定义权限不适合对等方案,在这种情况下,安装顺序不是预先确定的.

在某些情况下,可以通过在通常不需要插件的情况下嫁接插件来解决这个问题:

  • 应用程序A希望使用App发布的提供程序,但应用程序A可能首先安装
  • App的作者创建了一个插件(A'),它为应用程序B的提供者提供了<uses-permission>,并与应用程序B进行通信。
  • 应用程序A在安装A‘时调用A’上的某些内容(例如,向特定组件发送广播),这样A‘就可以验证应用程序A和应用程序B是在A之前安装的。
  • 当用户尝试做一些涉及A与B对话的事情时,如果没有安装插件,则引导用户安装插件

笨重的,但应该能用。

票数 6
EN

Stack Overflow用户

发布于 2015-09-08 13:59:18

很可能你们的免费和付费应用程序都声明了如下所示的同名许可。

代码语言:javascript
复制
<permission android:name="com.example.permission" android:label="test_permission" android:protectionLevel="dangerous"></permission>

编辑:为您的情况,似乎您应该只声明您的自由版本的许可。对于付费版本,请移除<permission>标记,只保留<uses-permission>标记。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32459536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档