android apt使用的填坑记录

简介: android apt使用的填坑记录

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

运行时注解的例子:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InjectView {    
    int id() default 0;
}


编译时注解的例子:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.CLASS)
public @interface InjectView {    
     int id() default 0;
}


他们之间的区别是RetentionPolicy不同。


在开发编译时注解,我们通常会写一个compiler的java module。以我自己的框架为例,有一个saf-injectview-compiler


image.png


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


下面是我的打包脚本

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/')
}


最为重要的是这一句:

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包了。


image.png

相关文章
|
缓存 安全 JavaScript
Kimsuky APT组织使用新型的AppleSeed Android组件伪装成安全软件对韩特定目标进行攻击
我们判断该组织已经具有了Windows,MacOs,Android的攻击能力,并且将在未来的一段时期持续的活跃。
|
存储 ARouter Java
Android开源系列-组件化框架Arouter-(三)APT技术详解
最近组里需要进行**组件化框架**的改造,用到了**ARouter**这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下ARouter
|
Java 编译器 开发工具
Android高阶用法:注解处理器APT用法详解
注解在我们`android`开发和`java`开发中有很多作用,今天我们就来介绍下他的一种高级用法:**注解处理器**
|
Android开发
【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )(二)
【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )(二)
139 0
【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )(二)
|
XML Java Android开发
【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术
【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术
241 0
【字节码插桩】Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术
|
Java Android开发
【Android APT】编译时技术 ( 开发编译时注解 )
【Android APT】编译时技术 ( 开发编译时注解 )
106 0
【Android APT】编译时技术 ( 开发编译时注解 )
|
Java Android开发 Kotlin
【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )(一)
【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )(一)
129 0
【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )(一)
|
Java Android开发
【Android APT】注解处理器 ( 根据注解生成 Java 代码 )
【Android APT】注解处理器 ( 根据注解生成 Java 代码 )
180 0
|
Android开发
【Android APT】注解处理器 ( Element 注解节点相关操作 )(二)
【Android APT】注解处理器 ( Element 注解节点相关操作 )(二)
212 0
|
Java Android开发
【Android APT】注解处理器 ( Element 注解节点相关操作 )(一)
【Android APT】注解处理器 ( Element 注解节点相关操作 )(一)
140 0