डिफ़ॉल्ट इंटरफ़ेस विधियाँ केवल Android N के साथ शुरू होने का समर्थन करती हैं


262

मैंने एंड्रॉइड स्टूडियो 3.1 में अपग्रेड किया और मुझे निम्न त्रुटि मिल रही है:

    Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner)
Message{kind=ERROR, text=Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner), sources=[Unknown source file], tool name=Optional.of(D8)}

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

यहाँ मेरा विन्यास विन्यास है:

compileSdkVersion 27
//buildToolsVersion '27.0.3'
defaultConfig {
    minSdkVersion 16
    targetSdkVersion 27
     multiDexEnabled true
     //...
   }

जैसा कि आप देख सकते हैं, मैं 27 को लक्षित कर रहा हूं जो पहले से ही 24 से आगे है कि इसकी शिकायत है। इसे ठीक करने के लिए मुझे क्या करना चाहिए? अगर मैं 1.8 जावा में बदल जाऊं, तो क्या मुझे बहुत सारे ग्राहक नहीं मिलेंगे? एंड्रॉइड स्टूडियो को अपग्रेड करने से पहले मुझे यह त्रुटि क्यों नहीं मिल रही थी?

मुझे नहीं पता कि यह हाल ही में मेरे द्वारा लगाई गई लाइफ़साइकल ऑबजर्वर क्लास के बारे में है, यह कोटलिन में था और अब मैंने इसे जावा में बदल दिया, लेकिन अभी भी प्रोजेक्ट को साफ करने के बाद वही त्रुटि मिलती है:

    public class LifeCycleAwareObserver implements LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void  onAppBackgrounded() {
        AnalyticsUtils.trackStartSession(true);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onAppForegrounded() {
        AnalyticsUtils.trackStartSession(false);
    }
}

कैसे ट्रेस करें जहां से त्रुटि आ रही है तो मैं इसे ठीक कर सकता हूं?

यहाँ मेरे संस्करण निर्भरताएँ हैं:

project.ext {

        firebase_version = '12.0.0'

        supportlib_version = '27.0.2'

        room_version = '1.0.0'

        espresso_version = '3.0.1'

        archLifecycleVersion = '1.1.1'
    }

20
"जैसा कि आप देख सकते हैं कि मैं 27 को लक्षित कर रहा हूं जो पहले से ही 24 से आगे है कि इसकी शिकायत है?" - यह आपके बारे में शिकायत नहीं कर रहा है targetSdkVersion। "इसे ठीक करने के लिए मुझे क्या करना चाहिए?" - जावा 8 संगतता सक्षम करने के साथ संकलन का प्रयास करें । "अगर मैं 1.8 जावा में बदल जाऊं तो मुझे ग्राहकों की कमी नहीं होगी?" - डिफ़ॉल्ट इंटरफ़ेस विधियों के लिए नहीं जो त्रुटि संदेश के बारे में शिकायत कर रहा है। "एंड्रॉइड स्टूडियो को अपग्रेड करने से पहले मुझे यह त्रुटि क्यों नहीं मिली।" - शायद एक अंतर्निहित निर्भरता (जैसे, डेटा बाइंडिंग)।
कॉमन्सवेयर

2
@CommonsWare यह बिल्कुल जैसा कि आपने उल्लेख किया था। 1.8 को बदलने से समस्या हल हो गई, लेकिन मुझे पुराने उपकरणों पर यह देखना होगा कि क्या होता है। कोड ऐसा ही किया यह compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8} था
j2emanue

जवाबों:


596

जैसा कि कॉमन्सवेयर ने उल्लेख किया है, संदर्भ के लिए इसे android {...}बिल्ड में बंद के अंदर जोड़ें। समस्या को हल करने के लिए आपके ऐप मॉड्यूल के लिए:

android {
...
  compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
...
}

13
कृपया निर्दिष्ट करें कि यह Android घुंघराले ब्रेस के अंदर होना चाहिए जैसे: android {// add here}
Idee

3
@ j2emanue मैंने पहले से ही build.gradle में इसे शामिल किया है, लेकिन अभी भी एक ही समस्या है, केवल रिलीज़ बिल्ड के लिए
R4j

मुझे आपके प्रॉजेक्ट फ़ाइल को प्रोजेक्ट और मॉड्यूल ग्रेडल फ़ाइल दोनों को देखना होगा। शायद एक सवाल पोस्ट।
j2emanue

इसे जोड़ने से प्रोजेक्ट संरचना में अनलॉक्ड रेफरेंस दिखाई देगा, जिसके बारे में कोई विचार है?
उर्वशी राणा

1
Sigh क्यों Google डिफ़ॉल्ट प्रोजेक्ट सेटिंग्स में उचित चीजें नहीं डाल सकता है? ..
रोमन ट्रूबा

65

इसे हल करने के लिए आपको Java8 का उपयोग करना चाहिए, Google के आधार पर आप ऐसा कर सकते हैं ( फ़ाइल> प्रोजेक्ट संरचना पर क्लिक करें )। और स्रोत संगतता और लक्ष्य संगतता बदलें।

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

और आप इसे सीधे इसी build.gradle फ़ाइल में भी कॉन्फ़िगर कर सकते हैं:

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

थैंक्यू प्रोग्रामर.नीस जॉब
जफर इकबाल

53

ऐप-स्तरीय ग्रेडेल में, आपको ये कोड लिखना होगा:

android {
...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

वे Android में JavaVersion.java से आते हैं ।

जावा संस्करणों की गणना।

9 से पहले: http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html

9 के बाद: http://openjdk.java.net/jeps/223

@canerkaseler


1
अद्यतन करने के लिए किस फ़ाइल के बारे में स्पष्टीकरण और जानकारी के लिए धन्यवाद। ऐप-स्तर या प्रोजेक्ट स्तर।
ललित शर्मा

30

अपने build.gradle (मॉड्यूल: एप्लिकेशन) को अपडेट करें compileOptionsब्लॉक जोड़ें और जोड़ेंJavaVersion.VERSION_1_8

apply plugin: 'com.android.application'

android {
    .................
    .........................
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

25

आप इस समस्या को नवीनतम Android स्टूडियो संस्करण 3.4.1 में स्रोत संगतता और लक्ष्य संगतता जावा संस्करण को अपग्रेड करके हल कर सकते हैं

  1. ओपन मॉड्यूल सेटिंग्स (प्रोजेक्ट स्ट्रक्चर) विनोड पर मैक पर ऐप फ़ोल्डर या कमांड + डाउन एरो पर राइट क्लिक करके यहां छवि विवरण दर्ज करें

  2. मॉड्यूल पर जाएं -> गुण यहां छवि विवरण दर्ज करें

  3. स्रोत संगतता और लक्ष्य संगतता संस्करण को 1.8 में बदलें यहां छवि विवरण दर्ज करें

  4. अप्लाई या ओके थाट्स पर क्लिक करें। यह आपकी समस्या को हल कर देगा।

इसके अलावा आप build.gradle (मॉड्यूल: एप्लिकेशन) में मैन्युअल रूप से जोड़ सकते हैं

android {
...

compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }

...
}

1
इसने मेरी समस्या को हल कर दिया। लेकिन कृपया मुझे सलाह दें कि नरक आपको कैसे पता चला कि यह समाधान है?
मेहरदाद सीरफ़ी

5

इस कोड का उपयोग अपने build.gradle में करें

android {
    compileOptions {
        incremental true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

2

मेरे प्रोजेक्ट का उपयोग ButterKnife और रेट्रो लैम्ब्डा है, JavaVersion.VERSION_1_8 सेट करने से काम नहीं चलेगा। यह हमेशा बटरकनीफ स्टैटिक इंटरफेस फंक्शन में काम करता है, जब तक कि मुझे यह माइग्रेट रेट्रोलंबा से नहीं मिला

टी एल; डॉ

बस अपने प्रोजेक्ट से JavaVersion.VERSION_1_8 और पूरी तरह से REMOVE रेट्रोलांबा जोड़ें। यह सफलतापूर्वक निर्माण करेगा।


0

यह मेरे साथ भी हुआ लेकिन डायनामिक फीचर्स का उपयोग करना। मेरे पास पहले से ही जावा 8 संगतता ऐप मॉड्यूल में सक्षम थी, लेकिन मुझे इस संगतता लाइनों को डायनामिक फ़ीचर मॉड्यूल में जोड़ना था और फिर यह काम किया।


0

19 से 21 तक minSdkVersion को सेट करने से मेरे लिए समस्या हल हो गई।

defaultConfig {
        applicationId "com.example"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 23
        versionName "1.0"
        vectorDrawables.useSupportLibrary = true
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.