我们平时写代码,都是java文件,然后转化为class文件,在java虚拟机中运行,我们上一篇文章写的 IOC,都是运行时候绑定的。今天,我们用一个APT的东东,我们在java转化为class文件的时候,我们使用APT,可以做很多事情。在编译阶段使用注解是无需反射的,性能会提升。ButterKnife的用法我就不介绍了,很简单,我们现在手动写一套Butterknife框架。
我们的模块分为以下几个,APP的Module,annotations的Moudle,专门用来提供注解。annotation compile 处理其它模块中的注解,就是我们的APT
annotation_compile的build.gradle
apply plugin: 'java-library'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//注册我们的注解处理器
//如果我们希望当前的模块是注解处理器,需要加这两句代码
// implementation 'com.google.auto.service:auto-service:1.0-rc3'
// As-3.4.1 + gradle5.1.1-all + auto-service:1.0-rc4
annotationProcessor'com.google.auto.service:auto-service:1.0-rc4'
compileOnly'com.google.auto.service:auto-service:1.0-rc4'
implementation project(path: ':annotations')
}
sourceCompatibility = "7"
targetCompatibility = "7"
在app的build.gradle里面修改
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation project(path: ':annotations')
//添加这句代码,这里不能写成implementation
annotationProcessor project(path: ':annotation_compiler')
}
待续