一种自动申请Android APP运行时权限的方法

著录项
  • CN202210589303.6
  • 20220527
  • CN115146236A
  • 20221004
  • 天翼电子商务有限公司
  • 王振;胡显晴;张氣箔;张坤洋
  • G06F21/12
  • G06F21/12 G06F8/41

  • 北京市西城区阜成门外大街31号4层429D
  • 北京(11)
摘要
本发明公开了一种自动申请Android APP运行时权限的方法。本方法通过注解作为权限申请节点的标记,之后的整个操作都会在在编译期间完成无需任何人工代码操作,通过自动识别注解并缓存注解参数保留权限名称,然后通过字节码的插装自动生成注册动态全权限拦截代码并插入方法执行前,只当所需权限全部开启才可继续向下执行,从而实现了自动申请Android运行时权限和管控的目的,自动无痕操作提高了Android App的隐私安全性,减少了对权限的维护成本,提高了用户体验以及Android App的性能。
权利要求

1.一种自动申请Android APP运行时权限的方法,其特征在于,包括以下步骤:

(1)@interface自定义用来标记代码向下执行需要申请运行时权限的节点,注解value携带参数,参数为单个或多个数组形式;

(2)引入字节码插装工具ASM为后面代码的自动修改生成以及整合提供支持;

(3)编译期间通过ClassReader自动解析.class文件中的所有事件元素,自动匹配(1)中所定义的注解并自动获取注解参数也就是所要申请的运行时权限,并通过自定义java类自动缓存参数以及标记方法或函数位置;

(4)自定义ClassVisitor可实现对.class文件中事件元素中对应的事件对象的过滤,解析字节码进行无痕代码注入;在这里直接使用(3)中缓存并以字节码的形式自动生成申请运行时权限所需的代码并插入缓存中标记的位置,这里插入的代码在申请权限部分为Android系统API提供我们不做修改,只需在在申请结果后通过系统返回来做是否拦截操作,只当用户通过授权所有申请权限才代码才可向下执行否则直接return;

(5)第三个步骤的操作已经完成了代码的无痕插入,这里我们通过ClassWriter将改变后的.class文件进行序列化的转化,生成并替换新的提供虚拟机加载使用的.class文件。

说明书
技术领域

本发明涉及移动开发领域,特别涉及一种自动申请Android APP运行时权限的方法。

随着移动互联网的发展,各类App产品层出不穷,用户的安全意识越来越强,各大手机厂商包括Android本身也对此推出越来越严格的管控制度,应用市场对应用的上架审核也越来越严格,为了各方面的监管条例,以一种方便快捷切安全不影响用户体验的方式来管控处理应用权限的非常重要的。

本发明要解决的技术问题是克服现有技术的缺陷,提供一种自动申请AndroidAPP运行时权限的方法,本方法通过注解作为权限申请节点的标记,之后的整个操作都会在在编译期间完成无需任何人工代码操作,通过自动识别注解并缓存注解参数保留权限名称,然后通过字节码的插装自动生成注册动态全权限拦截代码并插入方法执行前,只当所需权限全部开启才可继续向下执行,从而实现了自动申请Android运行时权限和管控的目的,自动无痕操作提高了Android App的隐私安全性,减少了对权限的维护成本,提高了用户体验以及Android App的性能。

本发明提供了如下的技术方案:

本发明提供一种自动申请Android APP运行时权限的方法,包括以下步骤:

(1)@interface自定义用来标记代码向下执行需要申请运行时权限的节点,注解value携带参数,参数为单个或多个数组形式;

(2)引入字节码插装工具ASM为后面代码的自动修改生成以及整合提供支持;

(3)编译期间通过ClassReader自动解析.class文件中的所有事件元素,自动匹配(1)中所定义的注解并自动获取注解参数也就是所要申请的运行时权限,并通过自定义java类自动缓存参数以及标记方法或函数位置;

(4)自定义ClassVisitor可实现对.class文件中事件元素中对应的事件对象的过滤,解析字节码进行无痕代码注入;在这里直接使用(3)中缓存并以字节码的形式自动生成申请运行时权限所需的代码并插入缓存中标记的位置,这里插入的代码在申请权限部分为Android系统API提供我们不做修改,只需在在申请结果后通过系统返回来做是否拦截操作,只当用户通过授权所有申请权限才代码才可向下执行否则直接return;

(5)第三个步骤的操作已经完成了代码的无痕插入,这里我们通过ClassWriter将改变后的.class文件进行序列化的转化,生成并替换新的提供虚拟机加载使用的.class文件。

与现有技术相比,本发明的有益效果如下:

本发明通过注解配合修改字节码指令进行操作,在编译阶段通过操作字节码指令完成代码的无痕插入,从而实现了代码的拦截,实现运行时权限的自动申请,所达到的效果与重复添加修改程序源码所达到的效果基本一致,一次发版就无需考虑线上版本进行源码修改的问题,避免了不同运行环境带来的兼容性和稳定性问题,对权限的管控更加安全。

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1是本发明的实施例示意图;

图2是本发明的检测流程示例图。

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。其中附图中相同的标号全部指的是相同的部件。

实施例1

如图1-2,本发明提供一种自动申请Android APP运行时权限的方法,包括以下步骤:

(1)@interface自定义用来标记代码向下执行需要申请运行时权限的节点,注解value携带参数,参数为单个或多个数组形式;

(2)引入字节码插装工具ASM为后面代码的自动修改生成以及整合提供支持;

(3)编译期间通过ClassReader自动解析.class文件中的所有事件元素,自动匹配(1)中所定义的注解并自动获取注解参数也就是所要申请的运行时权限,并通过自定义java类自动缓存参数以及标记方法或函数位置;

(4)自定义ClassVisitor可实现对.class文件中事件元素中对应的事件对象的过滤,解析字节码进行无痕代码注入;在这里直接使用(3)中缓存并以字节码的形式自动生成申请运行时权限所需的代码并插入缓存中标记的位置,这里插入的代码在申请权限部分为Android系统API提供我们不做修改,只需在在申请结果后通过系统返回来做是否拦截操作,只当用户通过授权所有申请权限才代码才可向下执行否则直接return;

(5)第三个步骤的操作已经完成了代码的无痕插入,这里我们通过ClassWriter将改变后的.class文件进行序列化的转化,生成并替换新的提供虚拟机加载使用的.class文件。

最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

本文发布于:2024-09-22 23:21:14,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/85276.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议