为什么将Gradle更新到3.1.0后会显示“第三方Gradle插件可能是原因”?

28

将Gradle更新至com.android.tools.build:gradle:3.1.0后,现在在日志中看到:

文件夹 E:\WORK\App\car_android\carapp\build\generated\source\kaptKotlin\devRelease

可能是第三方Gradle插件造成该问题。


它是在说或暗示什么原因呢? - hotkey
我遇到了同样的问题,我猜测是 generateStubs = true 属性的原因。 - Fábio Filho
我在“Build -> Sync”消息中遇到了相同的问题!我期待着找到解决方案! - Cristofer
5个回答

23

如果您收到了以下警告:

第三方Gradle插件可能是原因

在构建选项卡中出现此警告,这似乎是Android Studio v3.1.x的已知问题。
根据报告,这可能与即时应用程序配置有关,但是即使从run / Debug配置中删除它也似乎不能解决该问题(至少对于我的AS v3.1.1安装来说)。

请投票支持问题,以便Android Studio团队将其更多地关注,并希望及时解决。


2
这是因为Kapt注解处理器使用此目录存储Kotlin生成的文件。该目录是一个新的生成源集,就像您可以将源文件拆分为src/main/javasrc/main/kotlin一样。
然而,Android Gradle插件不将此目录识别为生成的源集。
在大多数情况下,这完全是无害的,因为大多数第三方处理器都会生成.Java文件。 Kapt将它们写入build/generated/source/kapt目录。

1

它已经在我的项目中工作了! ->

你的 build.gradle 项目应该像下面的图片一样:enter image description here

注意:如果你没有使用 Realm 和一些 Google 服务,它可能会有点不同

enter image description here

  • 现在,让我们开始->进入你的build.gradle应用程序

针对Android的平台模块 实验性多平台项目功能的更新引入了对Android平台模块的支持。这些模块应该在Gradle构建脚本中应用相应的插件,并可以使用来自公共模块的共享代码:

  1. 您将把此内容复制到build.gradle文件的顶部-

Kapt诊断位置 目前,Kapt(Kotlin注释处理工具)在报告注释处理期间遇到的错误时,可以提供指向原始Kotlin代码而不是生成的Java存根的链接。您可以通过将以下行添加到Gradle构建脚本(build.gradle)来启用此功能:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-platform-android'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
// ...

2. 现在添加它:

kapt {
    mapDiagnosticLocations = true
}
dataBinding {
    enabled = true
}

IntelliJ IDEA 插件改进 Kotlin 1.2.30 带来了 IntelliJ IDEA Kotlin 插件的各种改进,包括性能提升、错误修复和新的检查和意图。

对于一些项目来说这很重要:你需要将这个复制到你的 build.gradle 文件中-

 allprojects {
repositories {
    jcenter()
    google()
}

它将看起来像下面的图片

现在我们需要在dependencies{...// } build.gradle中添加实现:

// Architecture Component - Room
implementation "android.arch.persistence.room:runtime:1.1.0-beta1"
kapt "android.arch.persistence.room:compiler:1.1.0-beta1"

// Lifecyles, LiveData and ViewModel
kapt 'com.android.databinding:compiler:3.1.0'

// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:1.1.1"

// alternatively, just ViewModel
implementation "android.arch.lifecycle:viewmodel:1.1.1"

// alternatively, just LiveData
implementation "android.arch.lifecycle:livedata:1.1.1"
kapt "android.arch.lifecycle:compiler:1.1.1"

// Room (use 1.1.0-beta1 for latest beta)
implementation "android.arch.persistence.room:runtime:1.0.0"
kapt "android.arch.persistence.room:compiler:1.0.0"

// Paging
implementation "android.arch.paging:runtime:1.0.0-alpha7"

// Test helpers for LiveData
testImplementation "android.arch.core:core-testing:1.1.1"

// Test helpers for Room
testImplementation "android.arch.persistence.room:testing:1.0.0"

* *

  1. 清理你的项目
  2. 构建它
  3. 就这样!

更多信息:Android网站 :) 让我知道它是否有效!(如果不起作用,我会尝试帮助您找到更好的方法)


3
如果你修正语法并解释你从哪里复制和粘贴这些片段,那么这个答案会更加清晰易懂。 - Boann
1
@Boann 这样看起来更好吗? - Cristofer
2
看起来更好吗?不,它非常难以理解。 - Boann
2
你救了我的一天。谢谢。 - oalpayli
3
这与问题无关。 - Sky Kelsey

1
根据Android Studio issue,"Kapt 的根本问题在于 JetBrains IDEA 中的 Kapt 解析器将这些文件夹注册为 '位于无效路径中'。这是对 API 的误用。"
截至 2018 年 6 月 11 日,已经有一种修复方法来检查这些消息,并抑制实际上是有效路径的消息。

嗨,你是在哪里找到已经有修复程序可用的信息的? - Archie G. Quiñones
问题的最后,我看到现在有一些额外的“未修复”评论。 - A. L. Flanagan

0

我删除了两个文件夹 app\build\generated\source\kaptKotlin\debug 和 app\build\generated\source\kaptKotlin\release("debug" 和 "release"),并在 gradle 中添加了以下内容:

kapt {
        mapDiagnosticLocations = true
    }

那么项目就可以顺利同步了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接