AbstractProcessor实现编译时注解注入权限申请

简要理解AbstractProcessor是什么可以参考blog.csdn.net/industriously/article/details/53932425

首先先创建一个项目命名PermissionHelper,添加一个基础Activity即可。其次项目根目录右键新建一个module

选择java Library我们暂且命名为compiler,

上一步完成后,还要再新建一个Java Library我们暂且命名为annotation,顾名思义,注解的module

并且在【annotation】module新建三个注解分别为:

PermissionDenied权限被拒绝
PermissionGrant授予权限
ShowRequestPermissionRationale权限申请说明

接着我们要把【annotation】作为【compiler】的依赖库,并添加google提供了一个注册处理器的库

compile ‘com.google.auto.service:auto-service:1.0-rc2‘

到这里配置完成后就可以编写处理器代码了

新建PermissionProcessor,在类名配置@AutoService(Processor.class)  ,这属于编译时处理器标配吧

初始化得到元素操作类,日志输出工具

接下来是告诉处理器声明我们需要处理的注解类型

然后是告诉处理器支持的资源版本号,一贯就是latestSupported()

然后是分别处理我们自定义的三个注解,得到注解标致的value值也就是权限requestCode和声明的方法名,装载到mProxyMap集合中

代码中的roundEnv.getElementsAnnotatedWith返回的其实就是每个注解所标注的方法元素集合,是可以强转为ExecutableElement的

element有多个子集,介绍几个常见的

TypeElement------类型元素,注意枚举对应的时类,注解对应的接口

ExecutableElement------一般是指可执行的方法元素

VariableElement------一般指常量,变量 ,异常对象元素

pakeageElement-----一般指包元素,可以获得包信息

TypeParamterElement----这个也是比较常用的,一般指继承类实现的接口,或者泛型对象元素

最后就是把三个注解标记的方法以及requestCode 以key-value装在到map集合后,开始对每个以类名为key的proxyInfo执行文件写入

然后看一下proxyInfo这个类,他就是封装了一下 代码写入文件的工作,我们的代码自动写入工作就完成了

还没完,我们还没写权限怎么申请的呢,O(∩_∩)O哈哈~,项目根目录右键new mudule--->android library,我们命名为libpermission

并引入【annotation】作为依赖库,新建PermissionProxy接口,目的是为了ProxyInfo中的代码写入文件时 的implements实现

proxyInfo类中的 代码写入文件头部 包名,类名,实现 泛型类型

最后写一个权限申请的的流程

需要在activity或者fragment的onPermissionRequestReresult中回调过来,可以封装到baseActivity

权限申请回调过来后,我们要手动反射加载手动写入代码的类

最后,也就是去执行

最后上一张运行时GIF


github传送门:github.com/mrme2014/PermissionHelper

##### 关注微信公众号,每天分享优质文章![image.png](https://upload-images.jianshu.io/upload_images/2432544-a994bfdf50a2a827.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容