एपीआई 28 (पी) के लिए एंड्रॉइड डिज़ाइन समर्थन पुस्तकालय काम नहीं कर रहा है


106

मैंने android-P SDK वातावरण को सफलतापूर्वक कॉन्फ़िगर किया है। जब मैं एंड्रॉइड डिज़ाइन समर्थन लाइब्रेरी का उपयोग करने का प्रयास करता हूं तो मुझे प्रोजेक्ट बिल्ड त्रुटियों का सामना करना पड़ता है। परियोजना विन्यास हैं:

आईडीई: 3.2 कैनरी 17 लक्ष्य एपीआई: 28 संकलन एपीआई: 28

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.app.navigationpoc"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

और असफल त्रुटि का निर्माण करें:

मैनिफ़ेस्ट विलय विफल रहा: [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22 से 18-86 भी [com.android पर मौजूद है: एप्लिकेशन @ appComponentFactory मूल्य = (androidx.core.app.CoreComponentFactory) से। .support: सपोर्ट-कॉम्पिटिटर: 28.0.0-अल्फ़ा 3] AndroidManifest.xml: 22: 18-91 मूल्य = (android.support.v4.app.CoreComponentFactory)। सुझाव: 'टूल्स जोड़ें: रिप्लेस = "एंड्रॉइड: appComponentFactory" को AndroidManifest.xml पर तत्व करने के लिए: 6: 5-40: 19 को ओवरराइड करें।


क्या आपने इस उत्तर की जाँच की: stackoverflow.com/a/54825603/1318946
प्रतीक बुटानी

जवाबों:


89

आप या तो कलाकृतियों के पिछले API संकुल संस्करण या नए Androidx का उपयोग कर सकते हैं, दोनों कभी नहीं।

यदि आप पिछले संस्करण का उपयोग करना चाहते हैं, तो अपनी निर्भरता को बदलें

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
    implementation 'com.android.support.constraint:constraint-layout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.android.support:design:28.0.0-alpha3'
    implementation 'com.android.support:cardview-v7:28.0.0-alpha3'
}

अगर आप Androidx का उपयोग करना चाहते हैं:

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

    implementation 'com.google.android.material:material:1.0.0-alpha3'
    implementation 'androidx.cardview:cardview:1.0.0-alpha3'
}

2
यह उत्तर स्वीकृत होना चाहिए। Medium.com/mindorks/…
Rawa

इसमें comजगह क्यों नहीं materialदी गई implementation?
RoCk RoCk

58

महत्वपूर्ण अद्यतन

Android समर्थन पुस्तकालयों के बाद अपडेट नहीं करेगा 28.0.0

यह android.support पैकेजिंग के तहत अंतिम फीचर रिलीज़ होगा, और डेवलपर्स को AndroidX 1.0.0 पर माइग्रेट करने के लिए प्रोत्साहित किया जाता है ।

इसलिए पुस्तकालय AndroidX का उपयोग करें ।

  • समर्थन और AndroidX परियोजना में दोनों का उपयोग करें ।
  • आपके लाइब्रेरी मॉड्यूल या निर्भरता में अभी भी समर्थन पुस्तकालय हो सकते हैं। Androidx Jetifier इसे संभालेगा।
  • androidxया किसी भी लाइब्रेरी के स्थिर संस्करण का उपयोग करें , क्योंकि अल्फा, बीटा, आरसी में बग हो सकते हैं जिन्हें आप अपने ऐप के साथ शिप नहीं करना चाहते हैं।

आपके मामले में

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
}

इसकी अजीब, मेरी परियोजना लंबे समय से पी पर थी, लेकिन जब मैंने निर्माण किया तो यह आज समर्थन पुस्तकालय त्रुटियां देने लगा। क्या मुझे यहाँ कुछ याद आ रहा है?
तलहा

यह आम त्रुटि है जो हम सभी अब एक दिन का सामना कर रहे हैं, मैं इसे हर कुछ दिनों में प्रोजेक्ट चलाने में सामना करता हूं। बस अमान्य कैश और पुनरारंभ करें।
खेमराज

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

43

इसे जोड़ो:

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

आपके प्रकट आवेदन के लिए

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    tools:replace="android:appComponentFactory"
    android:appComponentFactory="whateverString">

आशा करता हूँ की ये काम करेगा


आपके पास क्या है @string/action_settings?
अलिटॉन ओलिवेरा

मुझे एक समस्या थी: OS स्वतंत्र पथ 'META-INF / androidx.core_core.version
Aliton Oliveira

2 लाइनों को जोड़ने के बाद त्रुटि: * What went wrong: Execution failed for task ':app:generateDebugBuildConfig'. > org.xml.sax.SAXParseException; systemId: file:/C:/D/code/js/emps_app/android/app/src/main/AndroidManifest.xml; lineNumber: 14; columnNumber: 52; The prefix "tools" for attribute "tools:replace" associated with an element type "application" is not bound.
user938363

2
क्या आपने AndroidManifest.xml हैडर के अंदर xmlns: tools = " schemas.android.com/tools " जोड़ा है ?
कार्लोस सैंटियागो

2
Android / src / debug / के अंतर्गत प्रकट होने वाला हेडर एक समान है:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363

16

मैंने उस विकल्प का उपयोग किया है:

Android Studio 3.2 और उच्चतर के साथ, आप मेनू पट्टी से Refactor> Androidrate पर AndroidX का चयन करके AndroidX का उपयोग करने के लिए एक मौजूदा परियोजना को जल्दी से स्थानांतरित कर सकते हैं।

https://developer.android.com/jetpack/androidx/migrate


9

Google ने नई AndroidX निर्भरताएँ पेश की हैं । आपको AndroidX पर माइग्रेट करने की आवश्यकता है, यह सरल है।

मैंने सभी निर्भरता को AndroidX निर्भरता में बदल दिया

पुरानी डिजाइन निर्भरता

implementation 'com.android.support:design:28.0.0'

नई AndroidX डिजाइन निर्भरता

implementation 'com.google.android.material:material:1.0.0-rc01'

आप यहां AndroidX निर्भरताएँ पा सकते हैं https://developer.android.com/jetpack/androidx/migrate


स्वचालित AndroidX माइग्रेशन विकल्प (एंड्रॉइड स्टूडियो 3.3+ पर समर्थित)

मेनू पट्टी से Refactor> AndroidX में माइग्रेट करके AndroidX का उपयोग करने के लिए किसी मौजूदा प्रोजेक्ट को माइग्रेट करें।


1
कार्यान्वयन 'com.google.android.material: सामग्री: 1.1.0-Alpha05' यह नया संस्करण है
हितेश तरबुंदिया

'android.support.design.widget.TabLayout आयात करने के बजाय क्या डालें?' ?
तिमिरबेक

6

1. इन कोडों को अपने ऐप में जोड़ें / build.gradle:

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:26.1.0' // the lib is old dependencies version;       
}

2. संशोधित एसडीके और उपकरण संस्करण 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2. अपने AndroidManifest.xml फ़ाइल में, आपको दो पंक्ति जोड़ना चाहिए:

<application
    android:name=".YourApplication"
    android:appComponentFactory="anystrings be placeholder"
    tools:replace="android:appComponentFactory"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

@Carlos सैंटियागो के उत्तर के लिए धन्यवाद: एपीआई 28 (पी) के लिए एंड्रॉइड डिज़ाइन समर्थन पुस्तकालय काम नहीं कर रहा है


यह समाधान भविष्य के अनुरूप नहीं है, क्योंकि आपको अभी AndroidX का उपयोग करना चाहिए। प्रकाशित होने वाले पुराने एप्लिकेशन अब अपग्रेड किए जाने चाहिए। यदि बहुत अधिक सुधार है, तो उन परिवर्तनों को अभी भी किया जाना चाहिए।
अभिनव सक्सेना

@ अभिनव सक्सेना आप सही हैं, हमें अपने प्रॉजेक्ट को पुराने एसडीके संस्करण के साथ इस समस्या को हल करने से बेहतर 28 तक अपडेट करना चाहिए। :)
कोडियोस

यह स्वीकृत उत्तर है, बहुत से सुझावों के बाद, कुछ भी मेरी मदद नहीं की, लेकिन इसने मुझे विन्यास के रूप में मदद की। {}। आपने मेरा दिन बचाया, धन्यवाद।
नूर हुसैन


4

फ़ाइल gradle.properties खोलें और इसमें इन दो पंक्तियों को जोड़ें:

android.useAndroidX = true
android.enableJetifier = true

साफ और निर्माण


1
useAndroidX उपयोगकर्ता androidx के लिए संकलक बताता है। पुराने एंड्रॉयड सपोर्ट पैकेज के बजाय फाइलें
लीना ब्रू

यह स्टूडियो 3.2 और उससे ऊपर के एंड्रॉइड पर माइग्रेट करने का निर्देश देता है। AndroidX पर माइग्रेट किए गए सभी लाइब्रेरी निर्भरता में सुधार किए जाएंगे।
अभिनव सक्सेना

3

नोट: आपको एक ही समय में अपने ऐप में com.android.support और com.google.android.material निर्भरता का उपयोग नहीं करना चाहिए।

अपनी बिल्ड.gradle (ऐप) फ़ाइल में Android के लिए सामग्री घटक जोड़ें

dependencies {
    // ...
    implementation 'com.google.android.material:material:1.0.0-beta01'
    // ...
  }

यदि आपका ऐप वर्तमान में मूल डिज़ाइन समर्थन लाइब्रेरी पर निर्भर करता है, तो आप AndroidX के लिए रिफ्लेक्टर का उपयोग कर सकते हैं ... विकल्प। ऐसा करने से नए पैक किए गए Androidx और com.google.android.material पुस्तकालयों का उपयोग करने के लिए आपके ऐप की निर्भरता और कोड अपडेट हो जाएंगे।

यदि आप अभी तक नए androidx और com.google.android.material पैकेज पर स्विच नहीं करना चाहते हैं, तो आप com.android.support:design:28.0.0-alpha3 निर्भरता के माध्यम से सामग्री घटकों का उपयोग कर सकते हैं।


3

सबसे पहले, आपको gradle.properties दिखना चाहिए और इन मूल्यों को सच करना होगा । यदि आप उन्हें नहीं देख सकते हैं तो आपको लिखना होगा।

android.useAndroidX=true
android.enableJetifier=true

उसके बाद आप अपने build.gradle (मॉड्यूल: ऐप) में AndroidX निर्भरता का उपयोग कर सकते हैं । साथ ही, आपको compileSDKVersion और targetVersion की जांच करनी होगी । उन्हें न्यूनतम 28 होना चाहिए। उदाहरण के लिए मैं 29 का उपयोग कर रहा हूं।

तो, एक Androidx निर्भरता उदाहरण:

implementation 'androidx.cardview:cardview:1.0.0'

हालांकि सावधान क्योंकि सब कुछ के साथ शुरू नहीं किया गया है हो सकता है androidx तरह cardview निर्भरता । उदाहरण के लिए, पुरानी डिजाइन निर्भरता है:

implementation 'com.android.support:design:27.1.1'

लेकिन नई डिजाइन निर्भरता है:

implementation 'com.google.android.material:material:1.1.0'

इसलिए, आपको ध्यान से खोजना और पढ़ना होगा। खुश कोड।

@canerkaseler


2

मैं सभी androidx.*को बदलकर उस स्थिति को पार करता हूं appropiate package name

अपनी लाइन बदलो

implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'
implementation 'androidx.constraintlayout:constraintlayout:1.1.1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

सेवा

implementation 'com.android.support:appcompat-v7:28.0.0-alpha3'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

उल्लेख किया

  • tools:replace="android:appComponentFactory"AndroidManifest से निकालें

0

नीचे कोड मेरे साथ पूरी तरह से काम किया:

dependencies {
    api 'com.android.support:design:28.0.0-alpha3'

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'androidx.test:runner:1.1.0-alpha2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha2'
}


0

Android प्रलेखन इस पृष्ठ पर नीचे दिए गए पृष्ठ पर स्पष्ट है। इसके अलावा, "OLD BUILD ARTIFACT" और "AndroidX बिल्ड आर्टवर्क" नामों के साथ दो कॉलम हैं

https://developer.android.com/jetpack/androidx/migrate

अब आपके पास gradle में कई निर्भरताएँ हैं। बस उन Androidx के साथ मेल खाते हैं जो कलाकृतियों का निर्माण करते हैं और उन्हें gradle में प्रतिस्थापित करते हैं।

यह पर्याप्त नहीं होगा।

अपने MainActivity पर जाएं (सभी गतिविधियों के लिए इसे दोहराएं) और "सार्वजनिक वर्ग MainActivity AppCompatActivity को बढ़ाता है" कथन में AppCompact गतिविधि को हटा दें और फिर से एक ही शब्द लिखें। लेकिन इस बार androidx लाइब्रेरी आयात की गई है। अब तक appcompact समर्थन फ़ाइल आयात हो गई है और इस्तेमाल किया (भी, उस appcompact आयात बयान को हटा दें)।

इसके अलावा, अपने लेआउट फ़ाइल पर जाएं। मान लें कि आपके पास एक बाधा लेआउट है, तो आप देख सकते हैं कि xml फ़ाइल में पहली पंक्ति की बाधा लेआउट में appcompact से संबंधित कुछ है। बस इसे हटा दें और फिर से बाधा लेआउट लिखें। लेकिन अब androidx संबंधित बाधा लेआउट जोड़ा गया है।

कई गतिविधियों और कई xml लेआउट फ़ाइलों के लिए इसे दोहराएं ।।

लेकिन चिंता न करें: एंड्रॉइड स्टूडियो संकलन करते समय ऐसी सभी संभावित त्रुटियों को प्रदर्शित करता है।


0

इसी तरह की समस्या थी। Build.gradle में जोड़ा गया और इसने मेरे लिए काम किया।

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

अगर आप AndroidX पर माइग्रेट किए बिना इस समस्या को हल करना चाहते हैं (मैं इसकी अनुशंसा नहीं करता)

यह मैनिफ़ेस्ट मर्जर समस्या androidX का उपयोग करके आपकी निर्भरता में से एक से संबंधित है।

आपको इस निर्भरता के रिलीज़ संस्करण को कम करने की आवश्यकता है। मेरे मामले के लिए:

मैं google या firebase का उपयोग कर रहा था

api 'com.google.android.gms:play-services-base:17.1.0'

मुझे समर्थन पुस्तकालय में उपयोग करने के लिए इसे 15.0.1 घटाना होगा।


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