Skip to content

Android studio 3.0 butterknife error #963

@weinierfei

Description

@weinierfei

Android studio version: Android studio 3.0 preview
gradle plugin:

        classpath 'com.android.tools.build:gradle:3.0.0-alpha1'
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.6.0'

expection:

Error:Unable to find method 'com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;'.
Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
<a href="syncProject">Re-download dependencies and sync project (requires network)</a></li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
<a href="stopGradleDaemons">Stop Gradle build processes (requires restart)</a></li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

I commented out the plugin(classpath 'com.jakewharton:butterknife-gradle-plugin:8.6.0'), then sync through

Activity

zdongcoding

zdongcoding commented on May 19, 2017

@zdongcoding

not suppert

simplysoft

simplysoft commented on May 20, 2017

@simplysoft
mtdhllf

mtdhllf commented on May 21, 2017

@mtdhllf

Error:FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:javaPreCompileDebug'.

Annotation processors must now be declared explicitly. The following dependencies in the compile classpath are found to contain annotation processors. Please add them to the annotationProcessor configuration.
- butterknife-7.0.1.jar
Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true to continue with the previous behavior. Note that this option is deprecated and will be removed in the future.
See https://developer.android.com/r/tools/annotation-processor-error-message.html for more details.

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
JakeWharton

JakeWharton commented on May 21, 2017

@JakeWharton
Owner
JvmName

JvmName commented on May 22, 2017

@JvmName

I'm using the following, with the following error:
root build.gradle:

dependencies {
    classpath 'com.jakewharton:butterknife-gradle-plugin:8.6.0'
    ...
}

lib/build.gradle:

apply plugin: 'com.jakewharton.butterknife'
...
def butterknife = "8.6.0"
implementation "com.jakewharton:butterknife:${butterknife}" //woo new Gradle API!
annotationProcessor "com.jakewharton:butterknife-compiler:${butterknife}"

Stacktrace from gradlew:

Caused by: java.lang.NoSuchMethodError: com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;
        at butterknife.plugin.ButterKnifePlugin$applyPlugin$1.execute(ButterKnifePlugin.kt:27)
        at butterknife.plugin.ButterKnifePlugin$applyPlugin$1.execute(ButterKnifePlugin.kt:15)
        ...

It looks like ButterKnifePlugin.kt #27 is the offending line - it calls variant.outputs.forEach, but the new Android Gradle 3.0 plugin requires variants.outputs.all (source)

I'm not really a Gradle expert - is that really the extent of the change that's necessary?

JvmName

JvmName commented on May 22, 2017

@JvmName

I've also tried the 8.6.1-SNAPSHOT - same issue

preraktrivedi

preraktrivedi commented on May 24, 2017

@preraktrivedi

Did anyone find a workaround to this yet?

Paget96

Paget96 commented on May 27, 2017

@Paget96

Add
maven {
url 'https://maven.google.com'
}

Then you'll got an update for alpha2.

LucasFoulonMongai

LucasFoulonMongai commented on May 30, 2017

@LucasFoulonMongai

I have found a workaround :
Using the 8.4.0 version ( classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0' )

But it doesn't resolve the compatibility issue with "Feature Module" :
Error:Butterknife plugin can only be applied to android projects

SebasDesimone

SebasDesimone commented on Jun 9, 2017

@SebasDesimone

I understand the project can not depend on an unstable version of the gradle plugin (per comment on #964).

So, as far as I see, we could:

  1. Fork the project until a new version address the problem.
  2. Wait until the gradle plugin gets out of alpha, then beta and reach at least a RC version.

Any other option?

denizmveli

denizmveli commented on Jun 16, 2017

@denizmveli

Moving the butterknife plugin locally into our projects buildSrc is working for me as a workaround

iamBedant

iamBedant commented on Jun 20, 2017

@iamBedant

@denizmveli I tried your workaround, In my case, it did not work for "Feature Module"

37 remaining items

palkartimes

palkartimes commented on Nov 23, 2017

@palkartimes

@Aks-4125 It worked. Thanks

songhaonangit

songhaonangit commented on Dec 6, 2017

@songhaonangit

compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

It worked.Thanks

Times125

Times125 commented on Dec 13, 2017

@Times125

you can use gradle 2.3.3.My project can't work if I use gradle 3.0.0.But it works when I use gradle 2.3.3.

ZQiang94

ZQiang94 commented on Dec 26, 2017

@ZQiang94

@AndSync @SaudM remove apply plugin: 'com.jakewharton.butterknife' may be worked,but there will be NullPointerException. eg.
22f63eb9-7536-47f6-b824-29ef9be82f10

configurer

configurer commented on Jan 3, 2018

@configurer

yes i'm using Android studio 3.1 Canary 6. It can't find the butter knife jar though gradle.

redbar0n

redbar0n commented on Feb 19, 2018

@redbar0n

Some additional info from our post-mortem after solving this bug, in case it may contain useful info to help someone else solve it as well:

Problem encountered when upgrading from Android Studio 2.3.2 to Android Studio 3.0.1:

TL;DR:
Don't upgrade to Android Studio 3.0, unless also add this to your app/build.gradle file:

android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                includeCompileClasspath true // NB! see doc below
            }
        }
    }

Alternatively, you could instead upgrade the ButterKnife library, but for us that entailed a lot of refactor renaming, and an unknown amount of extra upgrade work, so it was not desirable at this time.

Problem:

  • App crashes on Android mobiles on startup.
    Line 577 in our TimeLineUI.java gives a NullPointerException, because:
    Line 101 in our TimeLineUI.java uses @InjectView to instantiate dashboardBackground, but it is suddenly null at the time it is called.

NB: We didn't make any changes to the codebase. Only the automatic changes Android Studio made to the build.gradle when building in the new Android Studio version.

The stacktrace for the NullPointerException we got, similar to @ZQiang94 :

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: projectname.staging, PID: 6570
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{projectname.staging/projectname.ui.TimeLineUI}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setVisibility(int)' on a null object reference
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2924)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985)
                      at android.app.ActivityThread.-wrap14(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6692)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setVisibility(int)' on a null object reference
                      at projectname.ui.TimeLineUI.toggleSplashScreen(TimeLineUI.java:577)
                      at projectname.ui.TimeLineUI.initSplashscreen(TimeLineUI.java:553)
                      at projectname.ui.TimeLineUI.onCreate(TimeLineUI.java:178)

Cause and explanation:

The @InjectView annotations in the source code is used by the ButterKnife library to instantiate objects.

If the instantiation isn't done properly then the app crashes on startup, on line 577.

ButterKnife used to instantiate these properly in Android Studio 2.3.2 (where the build would succeed).

We installed Android Studio 3.0 first, and tried to build. It made some changes to build.gradle:

build.gradle (Project: projectname) build script dependencies was upgraded:

-        classpath 'com.android.tools.build:gradle:2.3.3'
+        classpath 'com.android.tools.build:gradle:3.0.1'

Android Studio 3.0 needs annotation processors specifically defined, for annotations to work correctly:
https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html?utm_source=android-studio#annotationProcessor_config

If we try to fix it by simply adding this dependency in the app/build.gradle, to match the butterknife version we use:
annotationProcessor 'com.jakewharton:butterknife-compiler:5.5.1'
Then we run into the issue that butterknife-compiler 5.5.1 JAR file doesn't exist (probably the same problem @configurer encountered), because ButterKnife didn't include butterknife-compiler until ButterKnife version 8.2.0.

We could upgrade to ButterKnife 8.2.0 or later.
But ButterKnife uses @BindView in the latest version, instead of @InjectView. So if we upgrade ButterKnife to 8.2.0 or later, then we have to rename all the instances of @InjectView to @BindView in 100+ places in 17+ files, and potentially have to make other changes too. The rename refactoring was attempted, but the upgrade entails we have to change other things in the codebase too. We are uncertain of the is uncertain of the size of the scope, and deems that it could take a while. So it is not worth it, at this time.

So the initial conclusion is that we:

  • Postpone upgrading to Android Studio 3.0 and/or upgrading the ButterKnife library indefinitely, until we absolutely need to do it. If so, use the suggestion by songhaonangit: Android studio 3.0 butterknife error #963 (comment)

  • Quick fix: Downloaded Android Studio 2.3.2 instead, and verified the build works there, when using classpath 'com.android.tools.build:gradle:2.3.2'

Solution:

Was actually able to use Android Studio 3.0 with this small change to the app/build.gradle file (to make it work like in Android Studio 2.3.2):

android {
...
    defaultConfig {
...
        javaCompileOptions {
            annotationProcessorOptions {
                // TODO:
                // includeCompileClasspath should be set to false in future versions, since this option is deprecated and will be removed.
                // This is to increase speed of compilation: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html?utm_source=android-studio#annotationProcessor_config
                // But when it's set to false be wary of any NullPointerException errors it may cause because of ButterKnife's @InjectView.
                includeCompileClasspath true
            }
        }
    }
jhass

jhass commented on Feb 19, 2018

@jhass

Now this is why it's worth to regularly spend time on updating dependencies.

arkilis

arkilis commented on Jun 17, 2018

@arkilis

@AndSync any reason why the apply plugin: 'com.jakewharton.butterknife'caused the issue?

bqhub30

bqhub30 commented on Aug 16, 2018

@bqhub30

I found this solution
Change:
compile 'com.jakewharton:butterknife:8.+.+'
into
annotationProcessor 'com.jakewharton:butterknife:8.+.+'
it worked for me

jhass

jhass commented on Aug 16, 2018

@jhass
pry(main)> "annotationProcessor 'com.jakewharton:butterknife:8.+.+'" == "annotationProcessor 'com.jakewharton:butterknife:8.+.+'"
=> true

🤔

sud007

sud007 commented on Aug 16, 2018

@sud007

I was solving the 'spot the difference' puzzle by user @bqhub30

But I am also stuck with unable to build ButterKnife !

gallonyin

gallonyin commented on Nov 12, 2018

@gallonyin

Error:
Annotation processors must now be declared explicitly. The following dependencies in the compile classpath are found to contain annotation processors. Please add them to the annotationProcessor configuration.

I found this solution:

android {
        ...
        defaultConfig {
            ...
            //config
            javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
    }
    ...
}
tonifirnandes

tonifirnandes commented on Aug 5, 2019

@tonifirnandes
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

a workaround, tested.

Thanks work for me, Specs build gradle:

buildscript {
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

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

task clean(type: Delete) {
    delete rootProject.buildDir
}
mahmoud-coo6

mahmoud-coo6 commented on Sep 22, 2019

@mahmoud-coo6

follow instruction for GitHub repository which worked for me 100% with the latest version here URL: https://github.com/JakeWharton/butterknife

wocoficial

wocoficial commented on Apr 5, 2021

@wocoficial

No meu caso foi apenas o antivírus (KasperSky) que estava filtrando as conexões criptografadas, após desativar voltou ao normal.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @JakeWharton@jhass@SebasDesimone@redbar0n@Alkarin

      Issue actions

        Android studio 3.0 butterknife error · Issue #963 · JakeWharton/butterknife