46

I am trying to add the latest version of butterknife and I get this error from gradle:

Error:(31, 0) Gradle DSL method not found: 'apt()' Possible causes:

  • The project 'MyProject' may be using a version of Gradle that does not contain the method. Gradle settings
  • The build file may be missing a Gradle plugin. Apply Gradle plugin
  • Where my gradle mobile build.gradle is:

    plugins {
        id "net.ltgt.apt" version "0.6"
    }
    
    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.2"
    
        defaultConfig {
            applicationId "com.mynamspace.myproject"
            minSdkVersion 19
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        wearApp project(':wear')
        testCompile 'junit:junit:4.12'
        compile 'com.jakewharton:butterknife:8.0.0'
        apt 'com.jakewharton:butterknife-compiler:8.0.0'
        compile 'com.android.support:appcompat-v7:23.3.0'
        compile 'com.google.android.gms:play-services:8.4.0'
        compile 'com.android.support:design:23.3.0'
        compile 'com.android.support:support-v4:23.3.0'
        compile 'com.android.support:recyclerview-v7:23.3.0'
    }
    

    What's wrong with the gradle-apt-plugin?

    Michel Feinstein
    • 13,416
    • 16
    • 91
    • 173
    • I haven't seen that `plugins` syntax before, and that does not appear to be the `android-apt` plugin. – CommonsWare Apr 26 '16 at 21:35
    • That's the new mecanism of gradle plugins: https://plugins.gradle.org/plugin/net.ltgt.apt (look for the "About the new plugin mechanism"). – Michel Feinstein Apr 26 '16 at 21:40
    • Where do I get the `android-apt` plugin?...I confess I am a bit lost here, I don't know much about gradle, I just got this plugin in a google search for "gradle apt" – Michel Feinstein Apr 26 '16 at 21:41

    5 Answers5

    102

    It's entirely possible that there's a way to get your plugins to work. Given your error, I'd start by following what the ButterKnife project uses, get that working, then see if there is a recipe for what you're trying.

    First, in your top-level build.gradle file, include classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' in the buildscript dependencies, such as:

      buildscript {
        repositories {
          mavenCentral()
        }
        dependencies {
          classpath 'com.android.tools.build:gradle:2.0.0'
          classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        }
      }
    

    Then, in your module's build.gradle file, include apply plugin: 'com.neenbedankt.android-apt' towards the top.

    The links are to the relevant files from the ButterKnife GitHub repo, from the project and the dedicated sample app.

    Community
    • 1
    • 1
    CommonsWare
    • 986,068
    • 189
    • 2,389
    • 2,491
    • 4
      Thanks for the help! The project's page (http://jakewharton.github.io/butterknife/) have these configurations missing.....but the github page doesnt (https://github.com/JakeWharton/butterknife) and they are pretty much the same as your code. – Michel Feinstein Apr 26 '16 at 23:09
    • 2
      Coming from ButterKnife 7.0.1 to 8.0.1 - the upgrade was not at all obvious. All these extra Gradle entries were not explained very well at all. Finally have it working now thanks to your advice, @CommonsWare! – Matthew Housser May 16 '16 at 22:15
    • `apply at top` did it – m02ph3u5 Jun 01 '16 at 14:36
    20

    apt is obsolete, Change apt to new format:

    change

    apt 'com.jakewharton:butterknife-compiler:8.5.1'
    

    to

    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
    

    https://bitbucket.org/hvisser/android-apt/wiki/Migration

    http://jakewharton.github.io/butterknife/

    Jay Rathod
    • 11,131
    • 6
    • 34
    • 58
    q...
    • 1,181
    • 10
    • 7
    4

    Instead of:

        plugins {id "net.ltgt.apt" version "0.6"}
    

    try:

        apply plugin: 'android-apt'
    
    Vladyslav Ulianytskyi
    • 1,401
    • 22
    • 22
    1

    In my case helped: adding to your build.gradle (not main, but project one) :

    apply plugin: 'com.neenbedankt.android-apt'

    and

    buildscript {
        repositories {
            jcenter()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:2.1.0'
            classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7'
        }
    }
    
    borichellow
    • 1,003
    • 11
    • 11
    0

    Add your apt code into the apps build.gradle NOT in main build.gradle.

    dependencies {
        apt group: 'group name here', name: 'artifact name here', version:'version here'
    }
    

    Of Course, you'll have to add the following code in your main build.gradle

    buildscript {
        repositories {
            jcenter()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:2.3.2'
            classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        }
    }
    
    ABS
    • 1,101
    • 10
    • 27