【问题标题】:Error when adding buildFeatures in build.gradle file在 build.gradle 文件中添加 buildFeatures 时出错
【发布时间】:2020-02-29 17:35:44
【问题描述】:

我正在尝试 compose,它是 Andorid jetpack 中的一个新功能。下面是我的代码。我在 app 的 build.gradle 文件中添加 buildfeatures,而不是在根文件夹中。

android {
    compileSdkVersion compileSDKVer
    buildToolsVersion buildToolsVer
    defaultConfig {
        applicationId "com.sample.slothyhacker.jetpackcompose"
        minSdkVersion minSdkVer
        targetSdkVersion targetSdkVer
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    buildFeatures {
        // Enables Jetpack Compose for this module
        //compose true
    }

    compileOptions {
        // Set both the Java and Kotlin compilers to target Java 8.
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

但是我的项目给了我一个编译错误。如果有人能说明我做错了什么,我将不胜感激。

Could not find method buildFeatures() for arguments [build_7yf57wk394cperk1t82v120yf$_run_closure1$_closure5@78c292be] on object of type com.android.build.gradle.internal.dsl.BaseAppModuleExtension.

【问题讨论】:

  • 你的 Gradle 版本是什么?
  • 最低api级别是多少?它应该是 21 或更高
  • 你只能在 Android Studio 4.0+ 中添加这个,只有 Canary 版本才可用

标签: android user-interface androidx android-jetpack-compose


【解决方案1】:

当我尝试将 Jetpack 添加到我现有的应用程序时,我发现了这个错误。我关注了Suraj's 的回答,甚至使用了最新的Kotlin gradle 插件,但无法准确找出问题所在。我也关注了官方的setup guide,也没用。一切看起来都还好,但没有任何帮助。

安装 Android Studio 4.0 canary 也没有帮助。

事实证明,仅仅包含某些依赖项是不够的——您需要特定版本或更高版本。我使用的是较旧的 Android Gradle 插件:3.5.3。升级到4.0.0-alpha07 修复了错误:

classpath 'com.android.tools.build:gradle:4.0.0-alpha07'

如果您将 Jetpack 添加到现有应用程序,请务必检查您的依赖项

【讨论】:

  • 我被告知永远不要升级 Gradle,每次我都必须重新安装所有东西!
【解决方案2】:

好像是这样

buildFeatures {
    viewBinding true
}

被替换为

viewBinding {
    enabled true
}

Reference

【讨论】:

【解决方案3】:

对于build.gradle.kts,我无法添加

android {
    buildFeatures {
        dataBinding = true
        viewBinding = true
    }
}

起作用的是这样的:

android {
    buildFeatures.dataBinding = true
    buildFeatures.viewBinding = true
}

【讨论】:

    【解决方案4】:

    要将 jetpack compose 添加到您的项目中,您需要按照以下步骤操作:

    注意:您应该使用 Android Studio 的 4.1 Canary 版本

    第 1 步:在 build.gradle 文件中

    android {
        defaultConfig {
            ...
            minSdkVersion 21
        }
    
        buildFeatures {
            // Enables Jetpack Compose for this module
            compose true
        }
        ...
    
        // Set both the Java and Kotlin compilers to target Java 8.
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
    

    注意:Jetpack Compose 当前需要 Kotlin-Gradle 插件的实验版本。要在您的应用中包含此插件,请在项目的 build.gradle 文件中包含以下内容

    buildscript {
        repositories {
            google()
            jcenter()
            // To download the required version of the Kotlin-Gradle plugin,
            // add the following repository.
            maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
        ...
        dependencies {
            classpath 'com.android.tools.build:gradle:4.0.0-alpha01'
            classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.60-eap-25'
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
            maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
        }
    }
    

    第 2 步:在您的 build.gradle 文件中添加 Jetpack Compose 工具包依赖项

    dependencies {
        // You also need to include the following Compose toolkit dependencies.
        implementation 'androidx.ui:ui-tooling:0.1.0-dev02'
        implementation 'androidx.ui:ui-layout:0.1.0-dev02'
        implementation 'androidx.ui:ui-material:0.1.0-dev02'
        ...
    }
    

    【讨论】:

    • 是的!其作品。谢谢,我想知道您在哪里找到该代码?我在documentation 中没有找到
    【解决方案5】:

    您只能在 Android Studio 4.0+ 中添加它,该版本仅适用于 Canary 构建

    【讨论】:

    • 我认为这不是一个准确的答案。当我有 4.0.1 版时,此错误会重复
    • 你知道金丝雀版本 4.0.1 @Mr.Lemon
    • 我正在使用 4.1 RC3 但仍然
    • 我的是 4.1,但这种情况仍在发生。
    • 我使用的是 4.1.1 版本,但它仍然给我错误
    【解决方案6】:

    这取决于您使用的是哪个版本的 Android Studio(和 gradle)。以上语法用于较新版本的 gradle(Android Studio 4.0 canary 及以上)

    如果您使用的是 3.5.3,请使用以下内容:

    dataBinding {
       enabled = true
     }
    

    来源:https://github.com/stripe/stripe-terminal-android/issues/90

    【讨论】:

    • 这也适用于 Android Studio 3.6.3。谢谢
    【解决方案7】:

    尝试增加你的依赖 你的项目/build.gradle

    buildscript {
        ext.kotlin_version = '1.4.10'
    
        dependencies {
            classpath 'com.android.tools.build:gradle:4.1.1'
        }
    }
    

    并且 yourproject/gradle/wrapper/gradle-wrapper.properties

    distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip
    

    【讨论】:

      【解决方案8】:

      我通过升级到 Android Studio 4.1.2 和 Gradle 到 4.1.2 解决了这个问题。

      【讨论】:

        【解决方案9】:

        您在其中添加此内容的 build.gradle 文件一定是错误的。如果你看到,有两个文件,我们要选择build.gradle(Module: ),打开时命名为build.gradle(:app)。

        【讨论】:

          【解决方案10】:

          这将使用 Android 4.0 及更高版本解决。

          如果还是不行,请尝试设置数据绑定

          替换

          android {
                 buildFeatures {
                     dataBinding = true
                 }
             }
          

          通过这个

              android {
                      buildFeatures.dataBinding = true
             }
          

          它对我有用。

          【讨论】:

            【解决方案11】:

            我的 Android Studio 是 3.2.1 版本,下面的代码对我有用。 Gradle Scripts -> build.gradle 文件,在 android 部分,添加以下行:

               dataBinding {
                  enabled = true
                }
            

            【讨论】:

              【解决方案12】:

              【讨论】:

                【解决方案13】:

                最新,只需将顶层(项目级)build.gradle文件中的gradle版本更改为最新版本,

                     buildscript {
                        repositories {
                            // Gradle 4.1 and higher include support for Google's Maven repo using
                            // the google() method. And you need to include this repo to download
                            // Android Gradle plugin 3.0.0 or higher.
                            google()
                            ...
                        }
                        dependencies {
                //Update This Line with latest Gradle version
                            classpath 'com.android.tools.build:gradle:4.2.0'
                        }
                    }
                

                查看最新的 gradle version here

                【讨论】:

                  【解决方案14】:

                  我在用 viewBinding 替换 Kotlin 合成时遇到了这个问题。原来我把buildFeatures放在了gradle文件的错误部分。我不小心把它放在了android 部分之外,这是我之前为androidExtensions 设置实验标志的地方。

                  所以我不得不接受这个:

                  android {
                    ...
                  }
                  
                  buildFeatures {
                    viewBinding = true
                  }
                  

                  把它改成这样:

                  android {
                    ...
                  
                    buildFeatures {
                      viewBinding = true
                    }
                  }
                  

                  【讨论】:

                    【解决方案15】:

                    更改 gradle 版本对我有用

                    classpath "com.android.tools.build:gradle:3.3.3"
                    

                    classpath "com.android.tools.build:gradle:4.1.3"
                    

                    【讨论】:

                      【解决方案16】:

                      我将顶级 build.gradle 文件 Gradle 版本升级为 classpath 'com.android.tools.build:gradle:7.0.0' 并将 Gradle-wrapper.properties 中的 distributionUrl 升级为 distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip 。这帮助我摆脱了错误。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-02-08
                        • 1970-01-01
                        • 2016-01-19
                        • 1970-01-01
                        • 1970-01-01
                        • 2020-01-03
                        相关资源
                        最近更新 更多