BuildConfig variable. Error: cannot find symbol
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.
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, 2022Comments
-
dilix almost 2 years
In project I have several
flavors
, severalbuildTypes
and severalfolders
for combinationsBuild combinations:
Folder structure
In each folder I have custom
Application class
+AndroidManifest
to register thisApplication class
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
- Build (successful)
- Some chagnes in the code
- Build (error)
- 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
andproductFlavors
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 over 5 yearsNice idea but it doesn't help :(
-
Norbert over 5 yearsSorry to hear that. In my projects all custom values are mostly in my
productFlavors
instead of in thebuildTypes
, but that won't help either I assume. -
FabioR almost 4 yearsAnother 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.