修改源码实现Android危险权限通过

#修改源码实现Android危险权限直接通过

在Android系统做6.0以后需要通过危险权限,
比如读写,录音,相机等,在都是需要动态申请才能获取到权限。

但是在系统开发中有时需要设置把危险权限设置和普通权限一样,
在AndroidManifest中申请就能通过,这就需要修改Android源代码来实现了。

网上看到几个方法,基本都不是很靠谱。

比如网上的这个方法:


如果不需要弹出此对话框来手动授予权限,而是默认授权,
可修改frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java文件下面的内容

doHandleMessage()下的case POST_INSTALL下

把final boolean grantPermissions = (args.installFlags& PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;

改为final boolean grantPermissions = true;即可

其实上面这个方法是可以实现的普通安装的app实现不弹出窗口就可以获取到权限。
但是对于预装的app无效,这类app还是会弹框显示危险权限的确认。
预装的app有两种:一种是adb push 到 pri-app下的
另一种是直接把代码放在package下编译出来的app。
显然上面的修改是不完全符合我们需求的,我们是要所有app都不弹出确认框。

下面做一下实现这个功能简单介绍。

修改源码的主要类是:PermissionManagerService.java

这个类是Google Android系统就有的,
它的路径在\frameworks\base\services\core\java\com\android\server\pm\permission\下

需要修改的方法名称:grantPermissions //这里grant是同意或授予的意思
这个grantPermissions方法有参数:PackageParser.Package pkg,
通过pkg可以获取到包名,当前app需要申请的所有权限等等信息。

方法里面的部分过程解析:

    // IMPORTANT: There are two types of permissions: install and runtime.(系统权限分为普通install权限和危险runtime权限)
    final int N = pkg.requestedPermissions.size();//获取AndroidManifest中请求的权限个数
    for (int i = 0; i < N; i++) { //分别对里面的每个权限进行遍历,判断
    。。。
    int grant = GRANT_DENIED; //默认权限值为拒绝
    if (bp.isNormal()) {
        grant = GRANT_INSTALL; //权限值为普通权限,会默认通过
    } else if (bp.isRuntime()) { //当权限为危险权限
        //grant = GRANT_DENIED;//系统中默认设置为危险权限
        grant = GRANT_INSTALL; //设置权限值为普通权限,会默认通过
    }

修改系统源码后,进行编译,烧录,启动的系统中,
请求危险权限就不会弹出对话框确认,直接可以获取到权限了!

本文的代码是在源码中的,只有系统开发者才能看到,普通开发者或用户是看不到的。
这里举例子的源码也是Android9.0中的源码,可能跟其他版本的源码不一样,
一般是控制权限的文件名不一样,方法名很少会改的。

其实通过系统云空间的搜索命令就可以搜到关键位置:

//搜索.java后缀的文件并且包含grantPermissions关键字的文件。
find . -name "*.java" | xargs grep  -w "grantPermissions" 

在源码中修改功能,很多时候都是靠搜索关键字来获取到关键位置的。
因为在不同版本的源码中,很多文件的位置或者命名会改变,但是方法名或关键字一般不会改变太大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值