在关于 permission-tree 的 Android 文档中,我找不到任何显示 permission-tree
有用的使用场景。
现在我脑子里有几个问题:
为什么我们需要
permission-tree
?是否有任何真实的场景来说明
permission-tree
是必要的?有没有例子说明客户端App是如何请求
permission-tree
的?
最佳答案
- Why do we need permission-tree?
当您使用权限树时,您不希望其他应用程序使用与您从权限树中声明的基本名称相同的任何权限。 例如,您使用
<permission-tree
android:name="com.example.project.taxes"
android:label="" />
这意味着您不希望其他应用使用任何带有“com.example.project.taxes”的权限前缀。
如果在您的应用之前安装了任何具有相同基本名称的应用,则这两个应用的权限均有效。
如果您的应用先安装,而另一个应用使用带有您的基本名称的权限前缀,则另一个应用的保护级别将自动更改为“签名”,即使它在 AndroidManifest.xml 中声明为“正常”。 这可以在您从设备中提取系统包文件时进行检查。
adb pull /data/system/packages.xml
普通的权限是这样的,
<item name="com.google.android.gms.permission.TRANSFER_WIFI_CREDENTIAL" package="com.google.android.gms" />
如果有冲突就会变成这样
<item name="com.google.android.gms.permission.TRANSFER_WIFI_CREDENTIAL" package="com.google.android.gms" protection="2" />
这意味着您将阻止所有 future 安装的应用程序,以使用您的基本名称获得正常权限。 当某些应用程序尝试使用它时,Logcat 会在应用程序安装时记录这样的消息,
PackageManager: Un-granting permission com.example.project.taxes.deductions.MAKE_SOME_UP from package com.others.app
因此请谨慎选择您的权限树名称。
- Is there any real scenario to illustrate permission-tree is necessary?
从新设备的/data/system/packages.xml 中,我可以看到只有一个谷歌应用程序正在使用权限树。
<permission-trees>
<item name="com.google.android.googleapps.permission.GOOGLE_AUTH" package="com.google.android.gsf" />
</permission-trees>
而且这个应用确实使用了很多自定义权限,所以它需要声明权限树并且不允许其他人与他们发生冲突。
- Is there any example to demonstrate how the client App requests the permission-tree?
这是客户端应用程序如何请求权限树的示例。
<permission-tree
android:name="com.example.project.taxes"
android:label="" />
但我认为客户端应用程序不需要使用权限树,它对系统应用程序更有意义。否则,为权限树使用一个长名称,确保没有其他人与此名称冲突。
关于android - 为什么我们需要 Android 中的权限树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29426702/