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

标签 android permissions android-manifest

在关于 permission-tree 的 Android 文档中,我找不到任何显示 permission-tree 有用的使用场景。

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

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

  2. 是否有任何真实的场景来说明permission-tree是必要的?

  3. 有没有例子说明客户端App是如何请求permission-tree的?

最佳答案

  1. 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

因此请谨慎选择您的权限树名称。

  1. 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>

而且这个应用确实使用了很多自定义权限,所以它需要声明权限树并且不允许其他人与他们发生冲突。

  1. 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/

相关文章:

android - 使用 big planet sqlite 数据库的离线 map

android - AIR 参数错误 : Error #2004: - Android

linux - 在 Tomcat 中自定义解压 WAR 的权限

linux - 使用控制台的 Symfony 缓存权限

Android:如何指定软件键盘在布局中出现的位置?

android - 在 Android 中获取 503 作为 Http 响应?

android - 我无法在运行时权限中显示 Manifest.permission.CALL_PHONE

android - 如何在 android list 中使用 <edit-config> 设置工具命名空间

android - 警告您的 Apk 正在使用需要隐私政策 : (android. 权限的权限。READ_PHONE_STATE)

android - 在使用sbt android-plugin编译的Java项目中指定AndroidManifest.xml的位置