为什么我们需要Android中的权限树?

时间:2015-04-03 05:28:22

标签: android permissions android-manifest rationale

permission-tree上的Android文档中,我找不到任何显示permission-tree的使用方案很有用。

现在我脑子里有几个问题:

  1. 为什么我们需要permission-tree

  2. 是否有必要说明permission-tree的实际情况?

  3. 是否有任何示例来演示客户端应用如何请求permission-tree

1 个答案:

答案 0 :(得分:-1)

  
      
  1. 我们为什么需要权限树?
  2.   

使用权限树时,您不希望其他应用使用与从权限树中声明的基本名称相同的任何权限。 例如,您使用

    <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" />

这意味着您将阻止所有将来安装的应用,以使用您的基本名称获得常规权限。 当某些应用尝试使用它时,Logcat会在安装该应用时记录类似这样的消息,

PackageManager: Un-granting permission com.example.project.taxes.deductions.MAKE_SOME_UP  from package com.others.app

因此请小心选择您的权限树名称。

  
      
  1. 是否有任何真实的场景来说明权限树是必要的?
  2.   

从新设备的/data/system/packages.xml中,我只能看到一个Google应用程序正在使用权限树。

 <permission-trees>
        <item name="com.google.android.googleapps.permission.GOOGLE_AUTH" package="com.google.android.gsf" />
    </permission-trees>

这个应用程序确实使用了很多自定义权限,这就是为什么它需要声明权限树而不允许其他人与之冲突的原因。

  
      
  1. 是否有任何示例来演示客户端应用如何请求权限树?
  2.   

这是客户端应用如何请求权限树的示例。

    <permission-tree
    android:name="com.example.project.taxes"
    android:label="" />

但是我认为使用权限树不需要客户端应用程序,它对于系统应用程序更有意义。否则,请为权限树使用一个长名称,请确保没有其他人与此名称冲突。