使用签名保护级别获取Android权限

3
根据 Android 开发文档,如果调用应用程序 B 的应用(签名与应用程序 A 相同)请求获取具有“signature”保护级别的权限,则可以获取应用程序 A 中的该权限。此外,根据这里的回答,“signature”保护级别的 Android 权限无法由第三方应用程序获取,但在Android 开发文档中,有一个名为“REQUEST_INSTALL_PACKAGES”的权限,其保护级别为“signature”。我看到很多代码在声明此权限:
<uses-permission android:name="REQUEST_INSTALL_PACKAGES" /> 

那么,这是如何实现的呢?有什么缺失吗?

1个回答

8
“那么它是如何可能的呢?”
他们在他们的清单中拥有该元素是因为他们的开发人员有能力输入它。
仅仅因为一个应用程序具有元素并不意味着它们获得了该权限。这取决于许多因素,包括protectionLevel。
在REQUEST_INSTALL_PACKAGES的特定案例中,它没有protectionLevel的signature值。它具有签名|appop。appop是一个令人困惑的值,但归根结底就是“应用程序可以行使权限的奇怪方式”。在这种情况下,Android 8.0+上的包安装器将直接拒绝任何没有请求此权限并尝试使用ACTION_VIEW或ACTION_INSTALL_PACKAGE的应用程序。否则,它将提示用户确认是否允许该应用请求安装程序包。
注意:|appop部分在JavaDocs中没有出现,但在平台清单中出现,这是运行时最重要的。

你是怎么发现保护级别是signature|appop而不是signature的?你知道appop的含义吗?文档中没有提到它。 - Mehran Torki
1
@MehranTorki:“你是怎么发现保护级别是signature|appop的?”——我查看了平台清单文件,这些权限在其中得到定义。例如,这里是Android 9.0的平台清单和REQUEST_INSTALL_PACKAGES的定义。“你知道appop的含义吗?”——正如我在答案中所写,“应用程序可以行使权限的方式有些奇怪”。例如,它们不像普通的dangerous运行时权限那样行为。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接