使用 kapt Android Studio 进行注释处理

Annotation processing with kapt Android Studio

我正在尝试使用 kapt 来使用我的注释处理器。但是我运行遇到了几个问题。

注释处理器 jar 是这样连接的:

    kapt files('libs/processor.jar')
    provided files('libs/processor.jar')

1) 我正在使用 JavaPoet 进行代码生成。并以这种方式保存我的class

    JavaFile javaFile = JavaFile.builder(PACKAGE, typeSpec).build();
    javaFile.writeTo(processingEnv.getFiler());

但它总是将其保存到 build\generated\source\kapt\release,并且无论构建变体如何,都不会将其保存到调试文件夹。

2) 第二个问题是生成的文件有时不会刷新,直到我按下 Build->Rebuild

kotlin-kapt 插件会根据构建的 library/application 变体自动 select 正确的输出目录。使用单个 com.android.application 模块构建项目时,Android Studio 将使用 "Build Variants" 菜单中的应用程序变体 selected。

库模块不是这样,如果没有另外配置,库模块将发布 release 构建变体 – 即使您 select "debug" 对于 select "debug" 中的那些模块=53=]菜单。

要启动 kapt 和 运行 库模块,您有三个选择:

  1. 在 "Build Variants" window 中,select "release" 用于包含您的注释代码的库模块。这将告诉 Android Studio 在 generated/sources/kapt/release/.

  2. 中获取 kapt 输出
  3. 在您的库模块 build.gradle 中将 defaultPublishConfig 设置为 debug(并在调试时也保留 selected 变体)。这将告诉 Android Gradle 插件编译 debug 库变体而不是默认的 release 变体。

    android {
        defaultPublishConfig "debug"
    }
    
  4. 您还可以选择同时发布 debugrelease 构建变体,方法是将 publishNonDefaults 设置为 true。在您的主应用程序模块中,您可以两次引用库模块,用于 debugCompilereleaseCompile 配置。但是,请注意,这将 总是 构建这两种类型,即使您在构建时可能只需要调试源,编译时间实际上加倍。