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
}
  1. 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')
}

对项目影响最小的为方案二

上一篇下一篇

猜你喜欢

热点阅读