什么是Kotlin中的generateStubs配置?

时间:2017-12-01 05:23:58

标签: android kotlin build.gradle

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

我在公共文档中找不到它:http://kotlinlang.org/docs/reference/kapt.html

kapt {
  generateStubs = true
}

如果我在项目中使用JavaKotlin(1.2),仍然需要添加?

1 个答案:

答案 0 :(得分:19)

修改

  

如果我在我的项目中使用Java和Kotlin(1.2),仍然需要它   添加

,版本 1.0.4 引入了注释处理API的新实验性实现。现在无需在generateStubs中配置此build.gradle

如果要启用它,请将以下内容添加到build.gradle

apply plugin: 'kotlin-kapt' 

您还必须从generateStubs

中删除build.gradle配置

但是关于generateStubs的详细信息,我保留了原来的帖子。

使用:

kaptgeneratestubs = true一起使用,以便使用dagger 2或dbflow等库,这将使编译器能够生成 Java和Kotlin之间的互操作性所需的存根类。除非启用generateStubs = true,否则" bootstrap" (自定义注释处理器,传递给javac,加载注释数据并调用其他注释处理器。)需要Java代码来引用生成的source.pulled from

注意:生成的代码始终位于Java,但不在Kotlin

When to Include:

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

kapt {
  generateStubs = true
}

这是如何运作的:

Stubs,编译器生成的中间类,允许"生成"要从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