前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android apt使用的填坑记录

android apt使用的填坑记录

作者头像
fengzhizi715
发布2018-08-24 16:09:53
3670
发布2018-08-24 16:09:53
举报

大家都知道java的注解(Annotation) 包含了运行时注解和编译时注解。 运行时注解的例子:

代码语言:javascript
复制
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InjectView {    
    int id() default 0;
}

编译时注解的例子:

代码语言:javascript
复制
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.CLASS)
public @interface InjectView {    
     int id() default 0;
}

他们之间的区别是RetentionPolicy不同。 在开发编译时注解,我们通常会写一个compiler的java module。以我自己的框架为例,有一个saf-injectview-compiler

屏幕快照 2016-12-18 上午11.30.03.png

今天要说的填坑是:这个compiler module在打成jar包,给其他项目使用需要注意的事项。

下面是我的打包脚本

代码语言:javascript
复制
task buildInjectCompiler( type: Jar) {    
    archiveName = 'SAF-inject-compiler-'+VERSION_NAME+'.jar'    //初始化资源路径集    
    
    from baseCompilerPath, injectviewCompilerPath    
    
    //去除路径集下部分的资源    
    exclude "**/BuildConfig.class"    
    exclude "**/Manifest.class"    
    exclude "**/R.class"    
    exclude "**/R\$*.class"    
    
    //只导入资源路径集下的部分资源    
    include "cn/salesuite/**/*.class"    
    include "META-INF/services/javax.annotation.processing.Processor"    
    
    destinationDir = file('build/outputs/')
}

最为重要的是这一句:

代码语言:javascript
复制
include "META-INF/services/javax.annotation.processing.Processor" 

是必须要添加的,虽然我们可能使用 Google 的 auto-service 库可以自动生成 META-INF/services/javax.annotation.processing.Processor 文件,但是打包时一定要将这个文件打入jar包,否则无法使用我们的自定义注解。

最后,我们看一下完成之后compiler包的情况,我们已经把javax.annotation.processing.Processor文件打入jar包了。

屏幕快照 2016-12-18 上午11.58.38.png

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.12.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档