ग्रैड बिल्डकॉनफिगफिल्ड बिल्डकॉनफिग प्रतीक का समाधान नहीं कर सकता है


84

मैं अपने Android एप्लिकेशन के निर्माण के लिए ग्रेडेल का उपयोग कर रहा हूं। मैं बिल्ड प्रकार (रिलीज़ या डीबग) के आधार पर कुछ झंडे का उपयोग करने की कोशिश कर रहा हूं।

मेरी ग्रेड फ़ाइल इस तरह दिखती है:

android {
    buildTypes {
        debug {
            buildConfigField 'boolean', 'PREPROD', 'true'
            buildConfigField 'boolean', 'STAGING', 'false'
        }

        release {
            buildConfigField 'boolean', 'PREPROD', 'false'
            buildConfigField 'boolean', 'STAGING', 'false'
        }
    }
}

और अगर मैं कॉल करने का प्रयास करता हूं BuildConfig.PREPRODया BuildConfig.STAGINGमुझे "प्रतीक का समाधान नहीं कर सकता" त्रुटि मिलती है। ग्रैडल सिंक सफल रहा, इसलिए मुझे नहीं पता कि क्या मैं इस सुविधा का उपयोग करने में सक्षम होने के लिए कुछ चरणों को भूल गया हूं?

उत्पन्न BuildConfig.javaफ़ाइल निम्नलिखित है (में build/source/buildConfig/debug/com.example.myapp):

package com.example.myapp;

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String PACKAGE_NAME = "com.example.myapp";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 400;
  public static final String VERSION_NAME = "";
}

क्या आप देख सकते हैं कि उचित BuildConfig वर्ग बनाया गया था। यह में स्थित होगाbuild/source/buildconfig/debug/...
जेवियर डुक्रोटे

मैंने BuildConfig.javaअपने प्रश्न में जनरेट को जोड़ा ।
गत

आप किस प्लगइन का उपयोग कर रहे हैं? 0.9.1 के साथ मैं इसे नहीं देखता (दोनों बूलियन कक्षा में दिखाई देते हैं)।
जेवियर डुक्रोटेट

4
आपको सिंक नहीं करना चाहिए (हालांकि स्टूडियो आपको इसे करने के लिए कहेगा क्योंकि यह नहीं जानता कि क्या आपने मॉडल को बदल दिया है), लेकिन आपको बिल्ड करने की आवश्यकता होगी, क्योंकि बिल्ड के दौरान बिल्डकॉनफिग क्लास क्या है इसके आधार पर उत्पन्न होता है build.gradle फ़ाइल।
ज़ेवियर डुक्रोहेट

2
नमस्ते, मैं विन्यास सेटिंग्स के माध्यम से आवेदन में दो स्वाद का प्रबंधन और आप की तरह मैं कुछ विन्यास चर बनाने के लिए कोशिश कर रहा हूँ, लेकिन अलग स्वाद के लिए। मैंने आपके तरीके की कोशिश की लेकिन फ्लेवर / बिल्डकॉनफिग.जावा में कोई अपडेट नहीं देखा और इसकी वजह से कंपाइल समय में भी वैरिएबल एक्सेस नहीं कर पाया। कोई उपाय !
CoDe

जवाबों:


85

सुनिश्चित करें कि आपकी फ़ाइल सही BuildConfig वर्ग आयात कर रही है । कभी-कभी यदि आपके पास अन्य प्रोजेक्ट लाइब्रेरी या मॉड्यूल हैं, तो यह गलत बिल्डकॉन्फिग को आयात कर सकता है। सुनिश्चित करें कि आपका आयात यह com.project.app.BuildConfig जैसा है । मैं एक ही मुद्दा था और समस्या यह थी, आशा है कि यह किसी की मदद कर सकता है।


2
आपने मेरा दिन बचाया! धन्यवाद महोदय !
अस्तन

1
@ अयान को खुशी है कि मैं मदद कर सका।
एमआरोड्रीजेस

कैसे मैं निर्माण के साथ पूर्ण com.xx परिवर्तन के रूप में वैरिएंट करते हैं?
Zapnologica

@Zapnologica बिल्ड वेरिएंट का इस पर कोई प्रभाव नहीं होना चाहिए। जब तक आपके पास प्रत्येक वैरिएंट पर अपने वेरिएबल को परिभाषित किया जाता है, बिल्ड.ग्रेड फ़ाइल पर।
MRodrigues

5 साल बाद और मैं आपको एक बड़ा धन्यवाद देता हूं। मेरे मामले में यह algoliasearch.BuildConfig का उपयोग मेरे बिना भी इसे आयात करने के लिए कर रहा था
डस्टीटरश

46

मुझे वही बग मिल रहा था। सहेजें के दाईं ओर सिंक्रनाइज़ेशन पर क्लिक करने का प्रयास करें । सिंक सिंक के बाद ऐसा करें ।


8
सिंक्रोनाइज़ कहाँ है?
लकी_गर्ल

फ़ाइल> "ग्रेड फ़ाइल के साथ सिंक प्रोजेक्ट"।
राबर्ट्स

26

मुझे हुआ क्योंकि मैंने स्ट्रिंग क्षेत्र को ठीक से घोषित नहीं किया था।

मैं भागने वाले पात्रों को भूल गया। से बदलना:

buildConfigField "String", "FOO", "foo"

सेवा

buildConfigField "String", "FOO", "\"foo\""

समस्या का हल किया।


यह मेरे लिए था! धन्यवाद! कभी-कभी यह वास्तव में उन छोटी चीजों पर लानत है :)
MacD

24

ग्रेडेल बिल्ड फ़ाइलों में परिवर्तन बिल्डकॉन्फ़िग क्लास की पीढ़ी को ताज़ा नहीं करता है, भले ही आप शीर्ष पर पीले "सिंक अब" बार पर क्लिक करें। एक पूर्ण स्वच्छ इस फ़ाइल को उत्पन्न करने के लिए मजबूर करेगा।

एंड्रॉइड स्टूडियो में: बिल्ड -> क्लीन प्रोजेक्ट


16

सुनिश्चित करें कि आप अपने पैरामीटर को भी defaultConfig में जोड़ें। आप शायद डिफ़ॉल्ट buildVarient चला रहे हैं, जबकि आपका पैरामीटर एक विशिष्ट बिल्ड वेरिएंट में परिभाषित किया गया है।

निर्माण में ढाल फ़ाइल का उपयोग करें:

 defaultConfig {
        buildConfigField('String' , 'myParameter', 'someValue')
    }

फिर, कोड में इसका उपयोग करें:

String myParam= BuildConfig.myParameter;

आशा है कि यह मदद करता है, एमए :)


14

आपको पहले से निर्मित बिल्ड वैरिएंट को चुनना होगा ताकि इसके बिल्डऑनफिगफिल्ड का उपयोग किया जा सके

यहाँ छवि विवरण दर्ज करें


इससे मुझे मदद मिली। मेरे पास पहले से ही एक बिल्ड वैरिएंट चयनित था, लेकिन इसे बदलने से एक पुनर्निर्माण हुआ जिससे त्रुटि दूर हो गई।
लार्स

14

प्रोजेक्ट रूट में इसे चलाने पर मेरे साथ भी ऐसा ही हुआ:

./gradlew assembleDebug

11

यदि इस प्रकार की समस्या होती है तो आप परियोजना को साफ और पुनर्निर्माण करेंगे।

धन्यवाद।


5

यह एक ही समस्या मुझे एक सप्ताह से अधिक समय से पागल कर रही है। मेरे मामले में, यह एक साधारण आयात गायब था। मैंने इसकी तलाश की लेकिन कहीं न कहीं डॉक्स में मुझे यह पता चला कि आपको बिल्डकॉनफिग क्लास को कहीं भी आयात करने की आवश्यकता है! और फिर भी, यह तर्कसंगत है। मुझे विश्वास था कि यह स्वचालित हो सकता है। खैर, यह ISN'T है।

तो या तो प्रयास करें:

  • BuildConfig.कोड के उस भाग पर एक बार क्लिक करें जो त्रुटि का कारण बनता है। नीले रंग के बुलबुले में एक मदद संदेश दिखाई देता है, जैसे कुछ कहते हैं: " ? uk.co.package.app.BuildConfig? Alt + ENTER" उस पर क्लिक करें और एंड्रॉइड स्टूडियो स्वचालित रूप से लापता आयात जोड़ता है। या
  • import uk.co.package.app.BuildConfig;अपने आयात की सूची में कहीं जोड़ें ।

फिर से निर्माण ... यह काम करता है! खैर, यह मेरे लिए वैसे भी किया था।

आशा है कि मेरी तरह एक और वर्गीकृत android नौसिखिया मदद करता है!


5

मेरे मामले में, एंड्रॉइड स्टूडियो में:

  1. बिल्ड -> स्वच्छ परियोजना;

  2. फ़ाइल -> अमान्य कैश / पुनः आरंभ करें ...

  3. बिल्ड -> पुनर्निर्माण परियोजना


4

एंड्रॉइड स्टूडियो में, बिल्ड बिल्ड पर क्लिक करें और फिर क्लीन प्रोजेक्ट पर क्लिक करें। - जब हो जाए, तो अपना प्रोजेक्ट बंद कर दें। - अपनी परियोजना को फिर से खोलें और इसे चलाएं, त्रुटि फिर से प्रकट नहीं होनी चाहिए, यह साफ हो गया है।


2

मेरे मामले में, समस्या यह थी कि मैंने सिर्फ अपनी परियोजना के एक मॉड्यूल का नाम बदल दिया था, लेकिन उस मॉड्यूल के नाम संदर्भ स्वचालित रूप से अपडेट नहीं किए गए थे AndroidManifest.xml

मैन्युअल रूप से उन का नाम बदलने और परियोजना के पुनर्निर्माण ने समस्या को हल किया।


मैंने कुछ रीफैक्टरिंग की थी और सभी उदाहरणों को पूरी तरह से नहीं बदला था; इस उत्तर ने मुझे सही दिशा में इशारा किया। धन्यवाद!
Cezille07

वही मुद्दा। परियोजना की सफाई की कोशिश की। Android स्टडियन को पुनरारंभ करना। कुछ भी काम नहीं किया त्रुटि अभी भी थी। फिर मैंने इसे एक बार और साफ किया (बिल्ड> क्लीन प्रोजेक्ट) तब मैंने डिबग को बलपूर्वक चलाया। निर्माण के बाद यह सफल रहा और त्रुटि गायब हो गई।
मुख्य

2

BuildConfig की घटनाओं के लिए खोजें। मेरे पास गैर-मौजूद बिल्डकॉनफिग और संकलक का एक दुष्ट आयात था जो पकड़ने के बजाय कोड के एक यादृच्छिक रेखा पर कहीं और बताया गया था!


0

मेरा पैकेज मेरे प्रकटन में अद्यतित नहीं था। मैंने फ़ाइल AndroidManifest.xml की जाँच की और अपने पैकेज का नाम सही किया। इस तरह मैंने इस समस्या को हल किया।


0

मेरे 2 सेंट:

मेरे पास एक सही था import xxx.BuildConfig, एएस उस रेखा को इंगित करेगा और उन रेखाओं के लिए जहां मेरे पास था BuildConfig.SOME_VARIABLE, इसलिए मैंने importरेखा को हटा दिया , इसे फिर से बनाया, यह कहते हुए एक त्रुटि हुई BuildConfig is unrecognised reference blah blahऔर उसके बाद मैंने इसे आयात किया और इसे फिर से बनाया।


0

एंड्रॉइड स्टूडियो में पुरानी परियोजना के निर्माण (डिबगिंग) के दौरान मुझे उसी त्रुटि का सामना करना पड़ा। जब मैंने त्रुटि की जांच की तो मैंने पाया कि BuildConfig वर्ग को 2 फ़ाइलों में परिभाषित किया गया था। 1st BuildConfig.java में था और 2nd BuildConfig2.java में था।

मैंने फ़ाइल में से एक को निकाल दिया और मैंने सही तरीके से काम किया।


मैंने BuildConfig.java फ़ाइल में से एक को निकाल दिया और फिर प्रोजेक्ट बिल्ड को सफलतापूर्वक शुरू किया और डीबग करना शुरू किया।
आलोक कुमार

0

मेरे मामले में, मैंने साइपर वार्निंग को कॉपी और पेस्ट करके एक मूर्खतापूर्ण गलती की। मैंने सिर्फ दूसरे वेरिएंट का नाम बदला और यह काम कर गया।

यहाँ छवि विवरण दर्ज करें


0

संभव समाधान: यदि आप Android X बिलिंग लाइब्रेरी का उपयोग कर रहे हैं , तो संभवत build.gradle: अपनी फ़ाइल में निम्न पंक्ति जोड़कर :

implementation 'com.android.billingclient:billing:2.2.0'

ज्ञात रहे कि एंड्रॉइड बिलिंग लाइब्रेरी ALSO में अपना स्वयं का BuildConfig वर्ग शामिल है जो Android Studio के कोड संपादक को भ्रमित कर सकता है। यदि ऐसा होता है, तो यह importआपकी किसी कक्षा में निम्नलिखित कथन को स्वतः जोड़ सकता है :

import com.android.billingclient.BuildConfig;

वह नहीं है जिसे आप उपयोग करना चाहते हैं, है ना? आप जिसका उपयोग करना चाहते हैं (यदि आप डीबग बिल्ड कर रहे थे) यहाँ हो सकता है:

./build/generated/source/buildConfig/debug/com/example/myapp/BuildConfig.java

तो ठीक करने के लिए, उस आयात स्टेटमेंट लाइन को हटा दें, और यह देखने के लिए पुनर्निर्माण करें कि क्या यह सही पर हल कर सकता है BuildConfig.java। यदि यह नहीं हो सकता है, तो आपको इसे स्पष्ट रूप से नाम देने की आवश्यकता हो सकती import com.example.myapp.BuildConfig.javaहै ताकि यह स्पष्ट हो सके कि आप अपने पैकेज से इस फ़ाइल का संस्करण चाहते हैं और कोई अन्य नहीं।

उम्मीद है की यह मदद करेगा!



0

अपने मॉड्यूल पर राइट क्लिक करके अपने मॉड्यूल का पुनर्निर्माण करें और चुनें Rebuild Module 'module name'

या छोटी कुंजी का उपयोग करें: Ctrl+ Shift+F9

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.