Butterknife: Android studio 3.0 butterknife error cannot find symbol class R2

Created on 6 Nov 2017  路  7Comments  路  Source: JakeWharton/butterknife

Before upgrade Android Studio from 2.3.3 to 3.0, I used buttherknife in a Library project via R2. But after upgrade, I encounter with this error:

Error:(27, 24) error: cannot find symbol class R2

This is my app gradle:

apply plugin: 'com.android.application'

android {
    dataBinding {
        enabled = true
    }
    compileSdkVersion 26
    buildToolsVersion '26.0.2'
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
        minSdkVersion 16
        targetSdkVersion 26
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}
repositories {
    maven { url "https://jitpack.io" }
    maven { url 'https://maven.fabric.io/public' }
    maven { url 'https://maven.google.com' }
    maven { url  "https://dl.bintray.com/krazykira/maven" }
    maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}
dependencies {
    //testCompile 'junit:junit:4.12'
    compile 'com.android.support:multidex:1.0.1'
    compile project(':libraryName')
}

LibraryName gradle:

apply plugin: 'com.android.library'
//apply plugin: 'com.jakewharton.butterknife'

android {
    publishNonDefault true
    dataBinding {
        enabled = true
    }
    compileSdkVersion 26
    buildToolsVersion '26.0.2'
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
        minSdkVersion 16
        targetSdkVersion 26
}
    repositories {
/*        maven {
            url  "https://dl.bintray.com/krazykira/maven"
        }*/
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
    }

    buildTypes {
        release {
            minifyEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    provided 'javax.annotation:jsr250-api:1.0'
    /*compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'*/
    compile 'com.jakewharton:butterknife:9.0.0-SNAPSHOT'
    annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT'

    compile 'com.android.support:multidex:1.0.1'

}

Root gradle:

buildscript {
    repositories {
        google()
        mavenCentral()
        jcenter()
        maven { url 'https://maven.fabric.io/public'}
        maven { url 'https://maven.google.com' }
        maven { url 'https://jitpack.io' }
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
        classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-SNAPSHOT'
    }
}

allprojects {
    repositories {
        mavenCentral()
        jcenter()
        maven { url "https://jitpack.io" }
        maven { url "https://maven.google.com" }
        maven { url  "https://dl.bintray.com/krazykira/maven" }
    }
}

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

Note: I get the error on Library project. I even use 9.0.0-SNAPSHOT, but doesn't work either.

Most helpful comment

  1. apply plugin: 'com.jakewharton.butterknife'
  2. In library gradle:
    buildscript {
    ...
    dependencies {
    classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
    }
    }

  3. api "com.jakewharton:butterknife:$rootProject.butterknifeVersion"
    annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterknifeVersion"

butterknifeVersion = "8.8.1"

All 7 comments

Try:
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'

@MarkerwApk
import com.packagename.sample.R2;

Error:(65, 24) error: cannot find symbol class R2
Error:Execution failed for task ':LibraryName:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.

  1. apply plugin: 'com.jakewharton.butterknife'
  2. In library gradle:
    buildscript {
    ...
    dependencies {
    classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
    }
    }

  3. api "com.jakewharton:butterknife:$rootProject.butterknifeVersion"
    annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterknifeVersion"

butterknifeVersion = "8.8.1"

@MarkerwApk Thanks. It did work. Just to explain in detail:

  1. Added apply plugin: 'com.jakewharton.butterknife' to LibraryName gradle.
  2. Library doesn't have buildscript, so I added classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0' to the Root gradle as below:
buildscript {
    repositories {
        google()
        mavenCentral()
        jcenter()
        maven { url 'https://maven.fabric.io/public'}
        maven { url 'https://maven.google.com' }
        maven { url 'https://jitpack.io' }
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
    }
    dependencies {
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
    }
}
  1. Added below lines to dependencies in LibraryName gradle:
dependencies {
    api "com.jakewharton:butterknife:8.8.1"
    annotationProcessor "com.jakewharton:butterknife-compiler:8.8.1"
}

I change my build.gradle as Drjacky told.but still has problem.
the error message is below.

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

When I change butterknife version to 8.0.1. no compile error occured. but when the app run.
NullPointerException happened.

@dede1314 Check these:
1.

android {
    defaultConfig {
       multiDexEnabled true
    }
}
  1. If you're using leakcanary, You can use the snapshot version which as fixed this.
  2. Build > Clean Project

@Drjacky @dede1314
I try to merge two project and when I convert the second project to library module the @BindView(R.id.xxx) in library is tell me (attribute value must be a constant) and when I research I add in my library module:
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
and:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
and:
implementation 'com.jakewharton:butterknife:10.2.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
and I add in my project:
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.1'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

}
my gradle is 5.6.4
but when I replace R to R2 , The R2 is not found
please help me

Was this page helpful?
0 / 5 - 0 ratings