API 28 (P) için Android tasarım desteği kitaplığı çalışmıyor


106

Android-P SDK ortamını başarıyla yapılandırdım. Android tasarım destek kitaplığını kullanmaya çalıştığımda proje oluşturma hatalarıyla karşılaşıyorum. Proje konfigürasyonları şunlardır:

IDE: 3.2 Canary 17 Hedef API: 28 Derleme API: 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'
}

Ve derleme başarısız hatası:

Manifest birleşmesi başarısız oldu: Attribute application @ appComponentFactory value = (androidx.core.app.CoreComponentFactory) [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22: 18-86 da [com.android adresinde mevcut .support: destek-uyumlu: 28.0.0-alpha3] AndroidManifest.xml: 22: 18-91 değer = (android.support.v4.app.CoreComponentFactory). Öneri: geçersiz kılmak için AndroidManifest.xml: 6: 5-40: 19'daki öğesine 'tools: replace = "android: appComponentFactory"' ekleyin.


Bu yanıtı kontrol ettiniz mi: stackoverflow.com/a/54825603/1318946
Pratik Butani

Yanıtlar:


89

Ya yapıtların önceki API paketleri sürümünü ya da yeni Androidx'i kullanabilirsiniz, ikisi birden asla.

Önceki sürümü kullanmak istiyorsanız, bağımlılıklarınızı şununla değiştirin:

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 kullanmak istiyorsanız:

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
Bu cevap kabul edilen cevap olmalıdır. Medium.com/mindorks/… ile
Rawa

Neden olduğu comiçinde yerini değildi materialiçinde implementation?
RoCk RoCk

58

Önemli Güncelleme

Android, destek kitaplıklarını daha sonra güncellemeyecektir 28.0.0.

Bu, android.support paketinin altındaki son özellik sürümü olacak ve geliştiricilerin AndroidX 1.0.0'a geçmeleri önerilir .

Bu yüzden AndroidX kitaplığını kullanın .

  • Do not kullanmak hem Destek ve AndroidX projede.
  • Kitaplık modülünüz veya bağımlılıklarınız hala destek kitaplıklarına sahip olabilir. Androidx Jetifier bunu halledecektir.
  • androidxAlfa, beta, rc, uygulamanızla birlikte göndermek istemediğiniz hatalara sahip olabileceğinden, kararlı sürümünü veya herhangi bir kitaplığı kullanın .

Senin durumunda

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'
}

tuhaf, projem uzun zamandır P üzerindeydi, ancak bugün inşa ettiğimde destek kitaplığı hataları vermeye başladı. Burada kaçırdığım bir şey var mı?
Talha

Şu anda hepimizin yüzleştiği yaygın bir hata, birkaç günde bir proje yürütürken karşılaşıyorum. Önbelleği geçersiz kılın ve yeniden başlatın.
Khemraj

@Talha Önce Build> Clear Project sonra Build> Make Project menüsünden deneyin, bazen bu yeterlidir, eğer yoksa Önbelleği geçersiz kıl ve yeniden başlat, çünkü önbelleği geçersiz kılma ve yeniden başlatma çok zaman alır ve tüm projeler için önbelleği temizler.
John

43

Bunu ekle:

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

manifest başvurunuza

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

Umarım yardımcı olur


Ne var mı @string/action_settings?
Aliton Oliveira

Bir sorun yaşadım: İşletim sisteminden bağımsız 'META-INF / androidx.core_core.version
Aliton Oliveira

2 satır ekledikten sonra hata oluştu: * 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
Xmlns: tools = " schemas.android.com/tools " u AndroidManifest.xml başlığının içine eklediniz mi?
Carlos Santiago

2
Android / src / debug / altındaki manifestte benzer bir başlık var:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Google, yeni AndroidX bağımlılıklarını tanıttı . AndroidX'e geçmeniz gerekiyor, çok basit.

Tüm bağımlılıkları AndroidX bağımlılıklarıyla değiştirdim

Eski tasarım bağımlılığı

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

Yeni AndroidX tasarım bağımlılığı

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

AndroidX bağımlılıklarını burada https://developer.android.com/jetpack/androidx/migrate bulabilirsiniz


Otomatik AndroidX taşıma seçeneği (android studio 3.3+ üzerinde desteklenir)

Menü çubuğundan Refactor> Migrate to AndroidX'i seçerek mevcut bir projeyi AndroidX'i kullanmak üzere taşıyın.


1
uygulama 'com.google.android.material: material: 1.1.0-alpha05' bu yeni sürümdür
Hitesh Tarbundiya

'import android.support.design.widget.TabLayout' yerine ne yazılır; ?
temirbek

6

1. Bu kodları uygulamanıza / build.gradle'a ekleyin:

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

2. SDK ve araçlar sürümü 28'e değiştirildi:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2. AndroidManifest.xml dosyanıza iki satır eklemelisiniz:

<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">

Cevabınız için teşekkürler @Carlos Santiago: API 28 (P) için Android tasarım desteği kitaplığı çalışmıyor


Şu anda AndroidX kullanıyor olmanız gerektiğinden, bu çözüm gelecekte uyumlu değildir. Yayınlanan Eski Uygulamalar şimdi yükseltilmelidir. Çok fazla yeniden çalışma varsa, bu değişikliklerin yine de yapılması gerekir.
Abhinav Saxena

@Abhinav Saxena Haklısınız, projemizi bu sorunu eski SDK sürümüyle çözmekten daha iyi 28'e güncellemeliyiz. :)
Codios

bu kabul edilen cevap, Birçok öneriden sonra, hiçbir şey bana yardımcı olmadı, Ama bu, konfigürasyonlar olarak bana yardımcı oldu. tümü {}. Günümü kurtardın, teşekkürler.
Noor Hossain

5

AndroidX için tasarım destek kitaplığı implementation 'com.google.android.material:material:1.0.0'


4

gradle.properties dosyasını açın ve bu iki satırı ona ekleyin:

android.useAndroidX = true
android.enableJetifier = true

temizle ve inşa et


1
useAndroidX, derleyiciye androidx kullanıcısına söyler. eski android destek paketi yerine dosyalar
Lena Bru

Bu, Studio 3.2 ve sonraki sürümlerini AndroidX'e geçmeye yönlendirir. AndroidX'e taşınan tüm kütüphaneler bağımlılıklarda düzeltilecektir.
Abhinav Saxena

3

Not: Uygulamanızda com.android.support ve com.google.android.material bağımlılıklarını aynı anda kullanmamalısınız.

Build.gradle (app) dosyanıza Android için Material Components ekleyin

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

Uygulamanız şu anda orijinal Tasarım Destek Kitaplığına bağlıysa, Android Studio tarafından sağlanan Refactor to AndroidX… seçeneğinden yararlanabilirsiniz. Bunu yapmak, uygulamanızın bağımlılıklarını ve kodunu yeni paketlenen androidx ve com.google.android.material kitaplıklarını kullanacak şekilde güncelleyecektir.

Henüz yeni androidx ve com.google.android.material paketlerine geçmek istemiyorsanız, Material Components'ı com.android.support:design:28.0.0-alpha3 bağımlılığı aracılığıyla kullanabilirsiniz.


3

Öncelikle gradle.properties'e bakmalısınız ve bu değerler doğru olmalıdır . Onları göremezsen yazmalısın.

android.useAndroidX=true
android.enableJetifier=true

Bundan sonra build.gradle'ınızda (Modül: uygulama) AndroidX bağımlılıklarını kullanabilirsiniz . Ayrıca compileSDKVersion ve targetVersion'ı kontrol etmelisiniz . Minimum 28 olmalıdır. Örneğin ben 29 kullanıyorum.

Öyleyse, bir androidx bağımlılığı örneği:

implementation 'androidx.cardview:cardview:1.0.0'

Ancak dikkatli olun çünkü her şey kart görünümü bağımlılığı gibi androidx ile başlamıyor . Örneğin, eski tasarım bağımlılığı :

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

Ancak yeni tasarım bağımlılığı :

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

Bu yüzden dikkatlice araştırmalı ve okumalısınız. Mutlu kod.

@canerkaseler


2

Bu durumu, tümünü androidx.*olarak değiştirerek geçiyorum appropiate package name.

hattını değiştir

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'

-e

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'

KAYIT EDİLMİŞ

  • tools:replace="android:appComponentFactory"AndroidManifest'ten kaldır

0

Aşağıdaki kod benimle mükemmel çalıştı:

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

Bunu dene:

implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'

0

Bu konuda Android dokümantasyonu açıktır.Aşağıdaki sayfaya gidin.Altında, "ESKİ YAPI YAPISI " ve "AndroidX yapı yapısı" adlı iki sütun vardır.

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

Artık gradle'da birçok bağımlılığınız var. Sadece Androidx ile olanları eşleştirin ve bunları gradle'da değiştirin.

Bu yeterli olmayacak.

MainActivity'nize gidin (bunu tüm aktiviteler için tekrarlayın) ve "public class MainActivity, AppCompatActivity'yi genişletir" ifadesindeki AppCompact Activity kelimesini kaldırın ve aynı kelimeyi tekrar yazın. Ancak bu sefer androidx kütüphanesi içe aktarılır. Şimdiye kadar appcompact destek dosyası içe aktarıldı ve kullanılır (ayrıca bu appcompact import ifadesini kaldırın).

Ayrıca, düzen dosyanıza gidin. Bir kısıtlama düzeniniz olduğunu varsayalım, sonra xml dosyasındaki ilk satır kısıtlama düzeninin appcompact ile ilgili bir şeyi olduğunu fark edebilirsiniz.

bunu birçok etkinlik ve birçok xml düzen dosyası için tekrarlayın ..

Ancak endişelenmeyin: Android Studio, derleme sırasında bu tür olası tüm hataları görüntüler.


0

Benzer bir sorun vardı. Build.gradle'a eklendi ve benim için çalıştı.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

AndroidX'e geçmeden bu sorunu çözmek istiyorsanız (tavsiye etmiyorum)

bu manifest birleşme sorunu, androidX kullanan bağımlılığınızdan biriyle ilgilidir.

bu bağımlılığın yayın sürümünü azaltmanız gerekir. benim durumum için:

Google veya firebase kullanıyordum

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

Destek kitaplığında kullanmak için 15.0.1'i düşürmem gerekiyor.


0

androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'Benim için eser eklemek .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.