DependencyInject 依赖注入
Android上的依赖注入借助于注解与AnnotationProcesser来实现
新建子工程annomation 用来定义各种注解以及annomation来处理编译期间的注解。
例子工程https://github.com/wentulu/DependencyInjectExample.git,
下方是注解处理模块的依赖
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation project(':annimations')
implementation 'com.google.auto.service:auto-service:1.0-rc5'//处理自动捕获注解的
implementation 'com.squareup:javapoet:1.11.1'//生成java代码的
}
这个模块是处理编译注解的主要地区(必须是java模块),主要职责有三个,找到指定注解,并且读取注解,根据注解生成java文件。
下方是的注解定义模块
apply plugin: 'java-library'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
使用java1.7原因是因为大部分Android手机上运行的是1.7的jre,这里是一个java lib工程。这个模块的主要功能是定义注解,以及注解runtime期间的工具类。
主模块app则需要对注解模块添加依赖以及引入编译时处理(APT或者annotationProcessor,后者是google的开发插件,前者是java上的,区别不清楚,实现注解处理器不会被打包进入软件包)。
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "cn.stu.cusview.ruiz.inject"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility 1.7
targetCompatibility 1.7
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
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'
annotationProcessor project(':AnnimationProcesser')
implementation project(':annimations')
}