Java 权限不是可更改的权限类型

Java 权限不是可更改的权限类型,java,android,permissions,Java,Android,Permissions,背景:我正在试用新的Tiles和tile服务,并决定根据我使用反射访问Connectivity manager的方法重新创建USB栓接tile 问题:其中一种方法是isTetheringSupported(),它会导致java.lang.SecurityException:您需要管理用户或创建用户权限:查询用户 因此,我将权限添加到清单中,但每次使用pm grant时,它都会返回“权限不是可更改的权限类型” 据我所知,当使用调试密钥签名时,我不应该得到这个错误 问题:我如何获得这些权限?更新:

背景:我正在试用新的Tiles和tile服务,并决定根据我使用反射访问Connectivity manager的方法重新创建USB栓接tile

问题:其中一种方法是
isTetheringSupported()
,它会导致
java.lang.SecurityException:您需要管理用户或创建用户权限:查询用户

因此,我将权限添加到清单中,但每次使用
pm grant
时,它都会返回“权限不是可更改的权限类型”

据我所知,当使用调试密钥签名时,我不应该得到这个错误

问题:我如何获得这些权限?

更新: 通过Xposed,可以挂接到
PackageManger
并删除以下检查,然后执行
pm grant…
以成功授予任何权限。如果有人看到这一点,并需要帮助这样做评论下面我会帮助你

旧答案 此代码位于源代码中

boolean isDevelopment =
            ((bp.protectionLevel&PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0);
不检查你的应用程序是否处于开发模式。它检查您请求的权限是否将
protectionLevel
属性(在清单中设置)设置为
development
。 您试图获取的权限似乎没有在清单中声明任何可以通过此检查的元素:

if (!isNormal && !isDangerous && !isDevelopment) {
        throw new SecurityException("Permission " + bp.name
                + " is not a changeable permission type");
    }

只是在另一个许可下偶然发现了这个。看来很遗憾没有办法得到它。

你签了吗?@KhalilM是的,我签了。我找不到关于
开发
保护级别的任何信息,但事实证明,
CREATE\u USERS
MANAGE\u USERS
的保护级别设置为
signature
,我应该能够使用
platform.x509.pem
platform.pk8
来获取权限@Bhav yes这两个权限未受
开发
保护,因此您无法通过adb访问它们,例如,上述
if
状态中的检查将引发异常。如果保护级别为
签名
,则只能在您所附的帖子中授予该权限。