android - Kotlin 中的 generateStubs 配置是什么?

标签 android kotlin build.gradle

什么是 Kotlin 的 generateStubs?这是我在 build.gradle 中的配置。

我在这里的公共(public)文档中找不到它:http://kotlinlang.org/docs/reference/kapt.html

kapt {
  generateStubs = true
}

如果我的项目中使用了JavaKotlin(1.2),还需要添加吗?

最佳答案

编辑:

If I'm using Java and Kotlin(1.2) in my project, it is still needed to add

,在 1.0.4 版本中引入了注解处理 API 的新实验性实现。现在不需要在build.gradle中配置这个generateStubs了。

如果您想启用它,请将以下内容添加到您的 build.gradle:

apply plugin: 'kotlin-kapt' 

您还必须从 build.gradle

中删除 generateStubs 配置

但是,作为您关于 generateStubs 详细信息的问题,我保留旧帖子的原样。



使用:

使用 kapt 和:generatestubs = true,以便使用像 dagger 2 或 dbflow 这样的库,这将使编译器能够生成 所需的 stub 类Java 和 Kotlin 之间的互操作性。除非启用 generateStubs = true,否则“bootstrap”(一个自定义注解处理器,传递给 javac,加载注解数据并调用其他注解处理器。) Java 代码需要引用生成的源。拉 from

注意:生成的代码总是在 Java 中,而不是在 Kotlin 中。


When to Include:

生成 stub 需要相对较多的工作,因为必须解析所有声明,有时了解返回类型需要分析表达式(= 符号后的函数体或属性初始化程序)。因此,在 kapt 中使用 stub 会稍微减慢您的构建速度。这就是为什么 stub 默认关闭的原因,要启用它们,您需要在 build.gradle 文件中编写以下内容:

kapt {
  generateStubs = true
}

这是如何工作的:

stub ,编译器生成的中间类,允许从 Kotlin 引用“生成的”源,否则编译器将无法引用缺失的源。

生成的源代码是在 "build/generated/source/kapt/main" 中创建的,因为它通常在 "build"下从 IntelliJ 的项目源中排除,此源根将在构建脚本本身中标记。

sourceSets {
  main.java.srcDirs += [file("$buildDir/generated/source/kapt/main")]
}

示例:

Dagger2-example with Kotlin (1.1.50) annotation processor support Gradle build

关于android - Kotlin 中的 generateStubs 配置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47587126/

相关文章:

android - 使用 v7 支持库 AlertDialog 时 Robolectric InflateException

android - 移动后端启动器连续查询永不返回

groovy - 应用程序代码中的gradle build属性

android - list 合并 - Android studio 0.8.1 升级构建错误 : property 'manifestFile' does not exist

android - 两个 drawable to edittext

android - 如何在android中的可扩展 ListView 中的子点击部分触发事件

kotlin - 是否有一种优雅的 kotlin 方式可以让编译器相信我刚刚为其分配了真实值的可空字段不能再为空?

android - Jetpack Compose 与一堆卡片的时序问题

android - 如何使用 dagger.android @Inject 抽象 BaseActivity 及其子类?

Android Gradle - 从外部文件加载签名配置