android使用AutoService无法生成META-INF
2020-05-11 本文已影响0人
逗比寨主
背景
在使用google的注解处理器auto-service时,在编译时无法自动生成 META-INF/services目录,不生成 javax.annotation.processing.Processor 文件,导致无法生成注解类。
分析
在编译时,可以看到build文件会有一句警告
Gradle may disable incremental compilation as the following annotation processors are not incremental...
从警告信息上来看,是Gradle出问题了,当前Gradle版本不支持当前的annotation方式。
解决方案
这是因Gradle 5.0之后,会忽略compile classpath中的 annotationProcessor,因此有以下两种方案解决问题。
方案一:
1.修改项目的build.gradle的classpath修改为3.1.1
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.1'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
- gradle-wrapper.properties文件的gradle版本,且替换gradle-wrapper.jar
#Sun Apr 22 13:09:31 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
3.clean项目重新build
方案二:
在项目中添加annotationProcessor 'com.google.auto.service:auto-service:1.0-rc4'
apply plugin: 'java-library'
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6'
implementation 'com.google.auto.service:auto-service:1.0-rc6'
//快速生成.java文件的库
implementation 'com.squareup:javapoet:1.10.0'
implementation project(':apt-annotation')
}
对项目影响最小的为方案二