30

我正在尝试 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.
4

16 回答 16

37

当我尝试将 Jetpack 添加到我现有的应用程序时,我发现了这个错误。我遵循了Suraj 的回答,甚至使用了最新的Kotlin gradle 插件,但无法准确找出问题所在。我也遵循了官方设置指南,但没有奏效。一切似乎都很好,但没有任何帮助。

安装 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 添加到现有应用程序,请务必检查您的依赖项

于 2020-01-03T18:42:24.633 回答
28

看来这

buildFeatures {
    viewBinding true
}

被替换为

viewBinding {
    enabled true
}

参考

于 2020-11-02T10:10:04.217 回答
8

因为build.gradle.kts无法添加它

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

起作用的是:

android {
    buildFeatures.dataBinding = true
    buildFeatures.viewBinding = true
}
于 2020-02-11T18:01:21.767 回答
7

要将 jetpack compose 添加到您的项目中,您需要执行以下步骤:

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

第 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' }
    }
}

build.gradle第 2 步:在文件中添加 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'
    ...
}
于 2019-11-04T11:57:52.427 回答
5

您只能在只有 Canary 版本的 Android Studio 4.0+ 中添加它

于 2019-11-04T11:55:56.990 回答
5

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

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

dataBinding {
   enabled = true
 }

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

于 2021-01-14T18:28:24.233 回答
2

尝试增加您的依赖项 yourproject/build.gradle

buildscript {
    ext.kotlin_version = '1.4.10'

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.1'
    }
}

还有你的project/gradle/wrapper/gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip
于 2020-12-14T08:50:28.430 回答
1

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

于 2021-01-29T13:15:48.220 回答
0

在其中添加它的 build.gradle 文件一定是错误的。如果你看到,有两个文件,我们必须选择 build.gradle (Module: <project_name.app>),打开时命名为 build.gradle (:app)。

于 2021-01-14T10:49:03.013 回答
0

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

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

代替

android {
       buildFeatures {
           dataBinding = true
       }
   }

这样

    android {
            buildFeatures.dataBinding = true
   }

它对我有用。

于 2021-02-12T11:08:59.517 回答
0

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

   dataBinding {
      enabled = true
    }
于 2021-05-07T06:01:07.750 回答
0

在https://developer.android.com/studio/preview升级到最新版本

于 2021-06-12T23:30:16.547 回答
0

最新,只需将顶级(项目级)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版本

于 2021-08-16T22:16:46.323 回答
0

我在将 Kotlin 合成器替换为viewBinding. 原来我把它放在buildFeatures了 gradle 文件的错误部分。我不小心把它放在了该android部分之外,这是我之前为androidExtensions.

所以我不得不接受这个:

android {
  ...
}

buildFeatures {
  viewBinding = true
}

并把它改成这样:

android {
  ...

  buildFeatures {
    viewBinding = true
  }
}
于 2021-08-25T13:35:53.533 回答
0

更改 gradle 版本对我有用

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

classpath "com.android.tools.build:gradle:4.1.3"
于 2021-11-24T09:33:41.913 回答
0

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

于 2022-01-25T10:21:33.807 回答