gpt4 book ai didi

安卓复制权限

转载 作者:太空狗 更新时间:2023-10-29 15:52:00 27 4
gpt4 key购买 nike

我有一个应用程序有免费版和专业版。专业版提出了一个迁移助手,用于在用户使用免费版后购买专业版时将数据从免费版导入专业版。

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

它在 Lollipop 之前的设备上运行良好,但在 Lollipop 上,如果我在安装免费版时尝试安装专业版,我会收到 INSTALL_FAILED_DUPLICATE_PERMISSION 错误消息。如果我使用相同的 key 签署两个版本(例如在调试中),它会起作用,但我没有在 Play 商店中,并且无法更改。

那么,是否有任何解决方案,或者是否破坏了 Lollipop 上的权限??

最佳答案

is there any solution

在你的情况下,你可以逃脱 Derek Fung's approach ,因为有明确的安装顺序(很少有人会在安装付费应用后安装免费应用)。

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

  • 使用 Binder.getCallingUid()获取调用应用的 UID。

  • 使用 PackageManager及其 getPackagesForUid()查找与 UID 关联的应用程序 ID。在您的情况下,应该只有一个,您可以确认应用程序 ID 是预期值。

  • 使用 my SignatureUtils class (或只获取它的代码)以验证调用应用程序的签名 key 是否与预期值匹配。

are the permissions broken on Lollipop ?

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

Such "feature" would also prevent creating / using 3rd party content providers, because if your app is installed first, you need to have the permission's declaration

自定义权限适用于有明确安装顺序的情况(例如,预安装的应用程序、主机和插件)。自定义权限不太适合没有预先确定安装顺序的对等场景。

在某些情况下,这可以通过在通常不需要的插件中移植来解决:

  • App A 想使用 App B 发布的 provider,但 App A 可能先安装

  • App A 的作者创建了一个插件 (A'),它具有 <uses-permission>为 App B 的提供商提供服务,并调解与 App B 的通信

  • 应用 A 在安装 A' 时调用 A' 上的某些内容(例如,向特定组件发送广播),因此 A' 可以验证应用 A 和应用 B 在 A' 之前安装

  • 当用户尝试做一些涉及A与B对话的事情时,如果没有安装插件,则引导用户安装插件

笨拙,但应该可以。

关于安卓复制权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32459536/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com