BuildConfig variable. Error: cannot find symbol

17,626

Solution 1

Finally looks like I've found a reason, I have the library project exactly with the same package ID as the main app, so the inner BuildConfig for library project doesn't contain variable.

Solution 2

Rebuild Project if you have still problem on importing Package Name and then .BuildConfig

Solution 3

Might be complete nonsense, but have you ever tested it with putting a default value directly in your defaultConfig?

defaultConfig {
    buildConfigField "boolean", "ANALYTICS", "false"
}

Solution 4

I also have flavors in my app and I got to know that if I use debugVariant than BuildConfig creates and works well but if I try to use releaseVariant to work on than it can't create BuildConfig file.

Solution 5

I have similar error, i.e. can't resolve BuildConfig.FOO , it's because of some other places has red mark error, e.g. you might unnoticed AndroidManifest.xml contains non-existent service class marked in red color. Fixed the service class first, then rebuild, the red color on BuildConfig.FOO are gone.

The lesson learned was don't focus at fixing specific red color which you don't see anything wrong, instead try look at other file and fix that first.

Share:
17,626
dilix
Author by

dilix

Android developer since 2010, Remote Android contractor and Moscow community lead at Toptal - Top 3% of Freelance Talent since 2016. I made several apps completely by myself, e.g. 'draw and ride' - my game that has 250k+ installs. Worked on "Yandex browser" that has more then 10 millions installs. Author of articles in Russian and English on Android topic. Top 5% on stackoverflow for Android.

Updated on July 26, 2022

Comments

  • dilix
    dilix almost 2 years

    In project I have several flavors, several buildTypes and several folders for combinations

    Build combinations:

    enter image description here

    Folder structure

    enter image description here

    In each folder I have custom Application class + AndroidManifest to register this Application class

    enter image description here

    Sometime, but just sometimes build fails with cannot find symbol error:

    \app\src\main\java\ru\my\package\app\environment\MyApp.java:35: error: cannot find symbol
                .core(new CrashlyticsCore.Builder().disabled(!BuildConfig.ANALYTICS).build())
    

    or App class independent but the same error

    \app\src\main\java\ru\my\package\presentation\presenter\impl\MainPresenterImpl.java:104: error: cannot find symbol
        if (!BuildConfig.ANALYTICS) return;
    

    But the very next build could be successful, so the possible flow is

    1. Build (successful)
    2. Some chagnes in the code
    3. Build (error)
    4. Build-retry (successful) <-- without any changes in code

    Note

    • It's not a sync problem and sync/invalidate cache is not the answer
    • It's not a wrong import problem

    Disclaimer: there are questions that looks like this one, but they're different, e.g.

    Gradle buildConfigField BuildConfig cannot resolve symbol

    UPDATE

    Gradle dependencies:

    dependencies {
        implementation fileTree(include: ['*.jar'], dir: 'libs')
        implementation project(path: ':OVSALibrary')
        implementation project(path: ':YaMapProject')
        implementation 'com.jakewharton:butterknife:8.8.1'
        implementation 'com.google.dagger:dagger:2.14.1'
        kapt 'com.google.dagger:dagger-compiler:2.14.1'
        implementation 'com.google.code.gson:gson:2.8.2'
        implementation 'eu.davidea:flexible-adapter:5.0.0-rc3'
        kapt 'com.jakewharton:butterknife-compiler:8.8.1'
        implementation "com.android.support:appcompat-v7:$support_lib_version"
        implementation "com.android.support:design:$support_lib_version"
        implementation "com.android.support:support-v4:$support_lib_version"
        implementation "com.android.support:recyclerview-v7:$support_lib_version"
        implementation "com.android.support:support-emoji:$support_lib_version"
        implementation "com.android.support:support-emoji-appcompat:$support_lib_version"
        implementation "com.android.support:support-emoji-bundled:$support_lib_version"
        implementation 'com.android.support.constraint:constraint-layout:1.1.2'
        implementation 'com.squareup.retrofit2:retrofit:2.3.0'
        implementation 'com.squareup.okhttp3:okhttp:3.10.0'
        implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
        implementation 'io.reactivex.rxjava2:rxjava:2.1.7'
        implementation 'ru.egslava:MaskedEditText:1.0.5'
        implementation 'nl.big-o:liqp:0.7.3'
        implementation 'org.jsoup:jsoup:1.7.2'
        implementation 'me.everything:overscroll-decor-android:1.0.4'
        implementation 'com.squareup.picasso:picasso:2.6.0-SNAPSHOT'
        implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
        implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
        compile ('com.squareup.retrofit2:converter-simplexml:2.3.0') {
            exclude group: 'stax', module: 'stax-api'
            exclude group: 'stax', module: 'stax'
            exclude group: 'xpp3', module: 'xpp3'
        }
        implementation 'com.makeramen:roundedimageview:2.3.0'
        implementation ('com.github.revern:socket.io-client-java:master-SNAPSHOT') {
            exclude group: 'org.json', module: 'json'
        }
        implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
        implementation 'com.luckycatlabs:SunriseSunsetCalculator:1.2'
        implementation ('com.github.developer-shivam:Crescento:1.2.1') {
            exclude group: 'com.android.support', module: 'appcompat-v7'
            exclude group: 'com.android.support', module: 'palette-v7'
        }
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
        implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
        implementation('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') {
            transitive = true;
        }
        implementation 'com.android.support:cardview-v7:27.1.1'
        implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    
        implementation 'com.malinskiy:superrecyclerview:1.1.4'
    
        // Yandex.Map things
        implementation 'com.yandex.android:mapkit:3.0.0'
    
        // Yandex ads. Adfox.
        rcImplementation 'com.yandex.android:mobmetricalib:3.0.0'
        debugWithAnalyticsImplementation 'com.yandex.android:mobmetricalib:3.0.0'
        releaseImplementation 'com.yandex.android:mobmetricalib:3.0.0'
        implementation 'com.yandex.android:mobileads:2.71'
    
    
        // Waiting for https://github.com/SundeepK/CompactCalendarView/pull/287
        // Waiting for https://github.com/SundeepK/CompactCalendarView/pull/288
        implementation 'com.github.dryaz:CompactCalendarView:master-SNAPSHOT'
    
        // Waiting for https://github.com/opacapp/multiline-collapsingtoolbar/pull/57
        implementation 'com.github.dryaz:multiline-collapsingtoolbar:master-SNAPSHOT'
    
        implementation 'com.github.clans:fab:1.6.4'
    
        implementation 'org.greenrobot:eventbus:3.1.1'
    
        testImplementation "org.robolectric:robolectric:3.8"
        testImplementation 'junit:junit:4.12'
        testImplementation "com.android.support.test:monitor:1.0.2"
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    
        // PAY SDK
        implementation(name:'mos-pay-sdk-1.0.9', ext:'aar')
        implementation 'io.card:android-sdk:5.5.1'
        implementation ('eu.livotov.labs.android:3DSView:1.1.2@aar') {transitive=true}
    
        // Android Architecture Components
        implementation "android.arch.lifecycle:runtime:$androidArch"
        implementation "android.arch.lifecycle:extensions:$androidArch"
        annotationProcessor "android.arch.lifecycle:compiler:$androidArch"
    
        compile 'com.google.firebase:firebase-core:16.0.0'
        compile 'com.google.firebase:firebase-messaging:17.0.0'
    }
    

    ** UPDATE ** Here's the list of buildTypes and productFlavors

    flavorDimensions("devbeta", "mainmirror")
        productFlavors {
            // Beta API enviroment
            beta {
                dimension = "devbeta"
                buildConfigField "String", "SOCKET_REMOTE_PATH", "\"/api-beta/socket.io\""
            }
    
            // Dev API enviroment
            dev {
                dimension = "devbeta"
                buildConfigField "String", "SOCKET_REMOTE_PATH", "\"/api-dev/socket.io\""
            }
    
            // Prod API enviroment
            prod {
                dimension = "devbeta"
                buildConfigField "String", "SOCKET_REMOTE_PATH", "\"/socket.io\""
            }
    
            mainhost {
                dimension = "mainmirror"
                buildConfigField "String", "CONFIG_REMOTE_HOSTNAME", "\"some.host.url\""
            }
    
            mirrorhost {
                dimension = "mainmirror"
                buildConfigField "String", "CONFIG_REMOTE_HOSTNAME", "\"some.host.url\""
            }
        }
    
        buildTypes {
            debug {
                minifyEnabled false
                shrinkResources false
                buildConfigField "boolean", "ANALYTICS", "false"
                signingConfig signingConfigs.customDebug
                ext.enableCrashlytics = false
                manifestPlaceholders = [
                        firebaseAnalyticsDeactivated: "true",
                        appIcon: "@mipmap/ic_launcher_debug",
                ]
            }
    
            debugWithAnalytics.initWith(buildTypes.debug)
            debugWithAnalytics {
                ext.betaDistributionGroupAliases = "group-internal"
                ext.betaDistributionReleaseNotes = "$getReleaseNotes"
                ext.enableCrashlytics = true
                buildConfigField "boolean", "ANALYTICS", "true"
                matchingFallbacks = ['debug', 'release']
            }
    
            debugWithProguard.initWith(buildTypes.debug)
            debugWithProguard {
                minifyEnabled true
                shrinkResources true
                proguardFiles(file('./proguard').listFiles())
                matchingFallbacks = ['release', 'debug']
            }
    
            // RC build for inner testers that has analytics, signed with debug key.
            rc {
                minifyEnabled true
                shrinkResources true
                proguardFiles(file('./proguard').listFiles())
                buildConfigField "boolean", "ANALYTICS", "true"
                // Fields for fabric beta distribution
                ext.betaDistributionGroupAliases = "group-internal"
                ext.betaDistributionReleaseNotes = "$getReleaseNotes"
    
                signingConfig signingConfigs.customDebug
    
                manifestPlaceholders = [
                        firebaseAnalyticsDeactivated: "false",
                        appIcon: "@mipmap/ic_launcher_rc",
                ]
                matchingFallbacks = ['debug', 'release']
            }
    
            release.initWith(buildTypes.rc)
            release {
                buildConfigField "boolean", "ANALYTICS", "true"
                ext.betaDistributionGroupAliases = "group-customer"
                signingConfig signingConfigs.release
                manifestPlaceholders = [
                        firebaseAnalyticsDeactivated: "false",
                        appIcon: "@mipmap/ic_launcher",
                ]
            }
        }
    
  • dilix
    dilix over 5 years
    Nice idea but it doesn't help :(
  • Norbert
    Norbert over 5 years
    Sorry to hear that. In my projects all custom values are mostly in my productFlavors instead of in the buildTypes, but that won't help either I assume.
  • FabioR
    FabioR almost 4 years
    Another tip: I kept invalidating cache and cleaning project to see if I could import the right BuildConfig, but nothing worked. I even deleted .idea and .gradle folders to see if regenerating them would solve it, but still it wouldn't work. I also reimported the project, nothing. Then I decided to rebuild the project just for the sake of it and it worked.