dilix
dilix

Reputation: 3893

BuildConfig variable. Error: cannot find symbol

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

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",
            ]
        }
    }

Upvotes: 12

Views: 30779

Answers (7)

Venom Dino
Venom Dino

Reputation: 89

This helped me.

android {
    buildFeatures {
       buildConfig = true
    }
}

And rebuild project.

Upvotes: 7

marius
marius

Reputation: 637

In my case I had another component which included an extra import that interfered with my base BuildConfig file

Look for imports from external libraries or components such as

import com.dpizarro.uipicker.library.BuildConfig;

and just delete them and rebuild.

Upvotes: 1

Zee Technical
Zee Technical

Reputation: 31

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

Upvotes: 2

林果皞
林果皞

Reputation: 7813

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.

Upvotes: 1

Harpreet
Harpreet

Reputation: 3070

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.

Upvotes: 1

dilix
dilix

Reputation: 3893

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.

Upvotes: 1

Norbert
Norbert

Reputation: 1244

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

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

Upvotes: 3

Related Questions