第三方Gradle插件可能是问题的原因。

133

在更新到Android Studio 3.1之后,我收到了以下错误消息:

该项目可以正常工作,这只是一个警告,因此我的问题是警告的含义是什么,如何消除它?

Gradle文件中相关部分:

这是我的项目的build.gradle文件:

buildscript {
    ext {
        kotlin_version = '1.2.31'
        anko_version = '0.10.4'
        room_version = '1.0.0'
        support_version = '27.1.0'
        firebase_version = '12.0.0'
        gms_version = '12.0.0'
    }

    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' }
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url "https://jitpack.io" }
        maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' }
    }
}

这是我的应用程序的build.gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 27
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

1
根据 https://issuetracker.google.com/issues/74537216 ,此问题已在AS3.2中得到解决。 - Angel Koh
从我这里来看,Build > Rebuild Project 能够正常工作。 - Zohab Ali
17个回答

143
为了解决问题,从“运行配置”中删除Instant App Provision,只保留Gradle-Aware Make
Run -> Edit Configurations..

构建成功后我的运行/调试配置

我使用的是AndroidStudio 3.1,Gradle插件版本为 3.1.0,Kotlin库版本为1.2.30


5
这个方法确实有效,但你有没有想过为什么会出现这种情况以及你是如何找到解决方案的? - humazed
59
不知何故,在删除“即时应用程序预配”后,它总是返回到原来的位置。 - humazed
3
这会禁用即时运行吗? - Caleb_Allen
7
不,但是没有人使用即时运行。这是针对“即时应用程序”,而不是即时运行。 - Tim
4
对于像 @humazed 这样反复出现此问题的用户,我发现一个解决方法:首先再次前往“Run > Edit Configurations”。然后点击顶部带有扳手图标的按钮,选择“Edit Defaults”。选择“Android App”,只保留之前的“Gradle-aware Make”选项,然后点击应用即可。 - b_yng
显示剩余9条评论

17
我重新启动了Android Studio,问题消失了。 点击文件 -> 无效缓存/重启 每次我更改gradle文件时都必须重新启动Android Studio,否则问题会重新出现。
你也可以尝试这个:
  1. 重新排列库:

  2. mavenCentral()
    maven { url 'https://jitpack.io' }
    google()
    jcenter()
    
  3. 清空该文件夹:用户的~/.gradle/caches,手动删除app build folder,然后执行clean and rebuild


但是我仍然无法运行我的应用程序,因为它会在启动之前构建项目。 - Infinite Loops

7
我为自己解决了这个问题的方法:

  • Change gradle plugin version to 3.1.0
  • Change Kotlin version to 1.2.30
  • Then Android studio changed gradle wrapper to version 4.4
  • Then Android studio was saying that the build tools version used was 27.0.3 and that I should change it to 27.0.3 so I also changed the target SDK to 27
  • I added this to my gradle.build:

    kapt {
         generateStubs = true
     }
    

我希望这有所帮助。


5
在Android Studio v3.1.2版本中,出现错误:
Folder D:\AndroidProjects\app\build\generated\source\kaptKotlin\debug
Folder D:\AndroidProjects\app\build\generated\source\kaptKotlin\release
3rd-party Gradle plug-ins may be the cause

由于数据绑定使用了apply plugin: 'kotlin-kapt',因此需要添加。
kapt {
    generateStubs = true
}
  1. 将gradle插件版本更改为3.1.2
  2. 将Kotlin版本更改为1.2.30
  3. 然后Android Studio将gradle wrapper更改为4.4
  4. 然后Android Studio说使用的构建工具版本为27.1.1,应将其更改为27.1.1,因此我还将目标SDK更改为27

5
以下是我遵循的一些步骤。在我的情况下,这解决了问题! 针对Android的平台模块 实验性多平台项目功能的更新引入了对Android平台模块的支持。这些模块应该在Gradle构建脚本中应用相应的插件,并且可以使用来自公共模块的共享代码:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-platform-android'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
// ...
// ...

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

kapt {
    mapDiagnosticLocations = true
}

添加此内容:

allprojects {
        repositories {
            jcenter()
            google()
        }
    }

不要忘记以下内容:

// 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. 构建出来,就这样!

将所有东西加起来,整理你的项目,构建出来,就这样! :) 如果这个方法不起作用,请告诉我!(如果它对你不起作用,我会帮您找到另一种解决方案)

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

如果您给了负评,请解释原因


1
mapDiagnosticLocations = true这一行添加到kapt配置中有时会起作用 - 至少有时候是这样的 :/ - kuhnroyal
@kuhnroyal 我很感激你的反馈!祝你有美好的一天,我会继续寻找更好的解决方案。 - Cristofer

5
实际上对我有帮助的是添加这个。
kapt {
     generateStubs = true
}

into build.gradle


2
尝试从设置中删除即时运行,gradle 就会正常工作。这对我有效。

2
在我的情况下,上述解决方案都没有解决我的问题。我使用的是1.2.50 Kotlin版本,没有提到Instant Run,构建也没有生成Dagger类。后来我找到了这个问题,并解决了它。显然,在我的情况下,这是一个与新的Kotlin版本相关的问题,所以我将其降级到版本1.2.41,然后就可以正常工作了。 顺便说一句,我之所以能找到问题,是因为我在Build屏幕上使用了Toggle View。
1:选择Toggle View并构建您的项目。

Toggle View

你将能够准确地看到发生了什么。

Error

Stackoverflow问题: Kotlin 1.2.50要求baseFeatureInfoDir 问题跟踪器: https://issuetracker.google.com/issues/110198434

2
以下是我遵循的步骤,它已经解决了我的问题。
  1. 首先安装Kotlin插件版本为'1.2.31',并在build.gradle文件中更新如下内容。

dependencies { classpath 'com.android.tools.build:gradle:3.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$1.2.31" }

  1. 清理项目。

  2. 最后重新构建项目。


1
  1. 移除 apply plugin: 'kotlin-kapt'
  2. 在 build.gradle 中添加 mavenCentral(),如下:

    allprojects { repositories { mavenCentral() google() jcenter() } }

  3. 同步并清理项目

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