我有一个免费和专业版本的应用程序。当用户使用免费后购买pro时,pro版本建议一个迁移助手将数据从免费导入到pro版本。
我添加了一个自定义权限来保护免费版本数据。这两个版本都有在其清单中声明的权限,只有专业版本才有使用权限。
它在预Lollipop设备上工作得很好,但是在Lollipop上,如果我尝试在安装免费版本时安装pro版本,我会收到一个INSTALL_FAILED_DUPLICATE_PERMISSION错误消息。如果我用相同的键(例如,在调试中)对两个版本进行签名,但是我没有在Play Store上签名,并且它不能被更改,它就能工作。
那么,是否有任何解决方案,还是棒棒糖的权限被破坏了??
发布于 2015-09-08 14:12:42
有什么办法吗
在您的情况下,您可能能够逃脱Derek Fung's approach,因为有一个明确的安装顺序(如果有的话,人们将安装免费应用程序后安装付费应用)。
或者,您可以跳过权限,因为在这种情况下,有两个应用程序需要相互通信。你知道那些应用程序是什么,你也知道它们的签名密钥。作为IPC工作的一部分执行您自己的验证:
Binder.getCallingUid()获取调用应用程序的UID。PackageManager及其getPackagesForUid()查找与UID关联的应用程序ID。在您的情况下,应该只有一个,您可以确认应用程序ID是期望值。棒棒糖的权限被破坏了吗?
您想要的行为--任何应用程序都可以定义任何其他应用程序的权限--是dreadful from a security standpoint。
这种“功能”还会阻止创建/使用第三方内容提供者,因为如果您的应用程序是先安装的,则需要有权限声明。
自定义权限是为有明确的安装顺序的情况而设计的(例如,预先安装的应用程序、主机和插件)。自定义权限不适合对等方案,在这种情况下,安装顺序不是预先确定的.
在某些情况下,可以通过在通常不需要插件的情况下嫁接插件来解决这个问题:
<uses-permission>,并与应用程序B进行通信。笨重的,但应该能用。
发布于 2015-09-08 13:59:18
很可能你们的免费和付费应用程序都声明了如下所示的同名许可。
<permission android:name="com.example.permission" android:label="test_permission" android:protectionLevel="dangerous"></permission>编辑:为您的情况,似乎您应该只声明您的自由版本的许可。对于付费版本,请移除<permission>标记,只保留<uses-permission>标记。
https://stackoverflow.com/questions/32459536
复制相似问题