butterknife: Android studio 3.0 butterknife error
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
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Reactions: 101
- Comments: 62 (9 by maintainers)
remove apply plugin: ‘com.jakewharton.butterknife’ may be worked
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
I remove apply plugin: ‘com.jakewharton.butterknife’ can works
Just remove
classpath 'me.tatarka:gradle-retrolambda:3.7.0'and downgrade butterknife version to 8.4.0classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'if you don’t want to downgrade, then.Don’t forget to remove
apply plugin: 'me.tatarka.retrolambda'from app level build gradle.I’m using the following, with the following error: root
build.gradle:lib/build.gradle:Stacktrace from
gradlew:It looks like
ButterKnifePlugin.kt #27is the offending line - it callsvariant.outputs.forEach, but the new Android Gradle 3.0 plugin requiresvariants.outputs.all(source)I’m not really a Gradle expert - is that really the extent of the change that’s necessary?
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.gradlefile: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:
@InjectViewto instantiatedashboardBackground, 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.gradlewhen building in the new Android Studio version.The stacktrace for the NullPointerException we got, similar to @ZQiang94 :
Cause and explanation:
The
@InjectViewannotations 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: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@InjectViewto@BindViewin 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: https://github.com/JakeWharton/butterknife/issues/963#issuecomment-349588766
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.gradlefile (to make it work like in Android Studio 2.3.2):Did anyone find a workaround to this yet?
Use 8.x
On Sat, May 20, 2017, 11:49 PM mtdhllf notifications@github.com wrote:
having these in my library’s build.gradle seemed to work
thanks Jake
Error:FAILURE: Build failed with an exception.
@AndSync @SaudM remove apply plugin: ‘com.jakewharton.butterknife’ may be worked,but there will be NullPointerException. eg.
Butterknife is not working with Feature Module to support Instant Apps. Below are my studio and gradle settings along with compiler error
gradle plugin: classpath ‘com.android.tools.build:gradle:3.0.0-alpha8’
project settings: implementation ‘com.jakewharton:butterknife:8.7.0’ annotationProcessor ‘com.jakewharton:butterknife-compiler:8.7.0’
Studio settings: Android Studio 3.0 Canary 8
error: element value must be a constant expression
Please let me know whether butterknife is supported for instant apps and if yes what changes to be done to make it work.
Resolved by adding dependencies compile ‘com.jakewharton:butterknife:8.8.1’ annotationProcessor ‘com.jakewharton:butterknife-compiler:8.8.1’
Thank you.
a workaround, tested.
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.
It’s deprecated in the stable release.
On Fri, Aug 25, 2017 at 3:40 PM Prerak Trivedi notifications@github.com wrote:
Moving the butterknife plugin locally into our projects
buildSrcis working for me as a workaroundAdd maven { url ‘https://maven.google.com’ }
Then you’ll got an update for alpha2.
I found this solution Change: compile ‘com.jakewharton:butterknife:8.+.+’ into annotationProcessor ‘com.jakewharton:butterknife:8.+.+’ it worked for me
don`t update gradle version , you can still use gradle 2.3.3
Use 9.0.0-SNAPSHOT
On Thu, Aug 17, 2017 at 8:35 PM JokAr notifications@github.com wrote:
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:
🤔
yes i’m using Android studio 3.1 Canary 6. It can’t find the butter knife jar though gradle.
Android Studio 3.0.1 is out and still not supporting
com.android.tools.build:gradle:3.0.1doesn’t seem to work. wrapper can be 4.1 but the gradle version MUST be 2.3.3 in order to workAre we getting update anytime soon?
Documentation should be updated since AS 3.0 has been around for awhile already. Followed the documentation and nothing seemed to work. I followed every comment here and luckily got it to compile.