Pustaka dukungan desain Android untuk API 28 (P) tidak berfungsi


106

Saya telah berhasil mengonfigurasi lingkungan SDK android-P. Ketika saya mencoba menggunakan pustaka dukungan desain android, saya menghadapi kesalahan pembuatan proyek. Konfigurasi proyek adalah:

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

Dan kesalahan build yang gagal adalah:

Penggabungan manifes gagal: Aplikasi atribut @ appComponentFactory value = (androidx.core.app.CoreComponentFactory) dari [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22: 18-86 juga ada di [com.android .support: support-compat: 28.0.0-alpha3] AndroidManifest.xml: 22: 18-91 value = (android.support.v4.app.CoreComponentFactory). Saran: tambahkan 'tools: replace = "android: appComponentFactory"' ke elemen di AndroidManifest.xml: 6: 5-40: 19 untuk diganti.


Sudahkah Anda memeriksa jawaban ini: stackoverflow.com/a/54825603/1318946
Pratik Butani

Jawaban:


89

Anda bisa menggunakan artefak versi paket API sebelumnya atau Androidx baru, tidak pernah keduanya.

Jika Anda ingin menggunakan versi sebelumnya, ganti dependensi Anda dengan

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

jika Anda ingin menggunakan 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
Jawaban ini harus menjadi jawaban yang diterima. Info lebih lanjut di medium.com/mindorks/…
Rawa

Mengapa ini comtidak menggantikan di materialdalam implementation?
RoCk RoCk

58

Pembaruan Penting

Android tidak akan memperbarui pustaka dukungan setelah 28.0.0.

Ini akan menjadi rilis fitur terakhir pada kemasan android.support, dan pengembang didorong untuk bermigrasi ke AndroidX 1.0.0 .

Jadi gunakan pustaka AndroidX .

  • Jangan gunakan kedua Dukungan dan AndroidX dalam proyek.
  • Modul atau dependensi library Anda masih dapat memiliki library dukungan. Androidx Jetifier akan menanganinya.
  • Gunakan versi stabil androidxatau pustaka apa pun, karena alfa, beta, rc dapat memiliki bug yang tidak ingin Anda kirimkan bersama aplikasi Anda.

Dalam kasus Anda

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

Anehnya, proyek saya sudah di P sejak lama, tetapi mulai memberikan kesalahan pustaka dukungan hari ini ketika saya membangun. Apakah ada yang saya lewatkan di sini?
Talha

Ini adalah kesalahan umum yang kita semua hadapi sekarang ini, saya menghadapinya setiap beberapa hari dalam menjalankan proyek. Lakukan saja Invalidate cache dan restart.
Khemraj

@Talha Coba dari menu Build> Clear Project lalu Build> Make Project dulu, terkadang ini sudah cukup, jika tidak lakukan Invalidate cache and restart, karena validate cache dan restart membutuhkan banyak waktu dan membersihkan cache untuk semua proyek.
Yohanes

43

Tambahkan ini:

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

ke aplikasi manifes Anda

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

semoga membantu


Apa yang Anda miliki @string/action_settings?
Aliton Oliveira

Saya punya masalah: Lebih dari satu file ditemukan dengan jalur independen OS 'META-INF / androidx.core_core.version
Aliton Oliveira

Kesalahan setelah menambahkan 2 baris: * 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
Apakah Anda menambahkan xmlns: tools = " schemas.android.com/tools " di dalam header AndroidManifest.xml?
Carlos Santiago

2
Manifes di bawah android / src / debug / memiliki tajuk yang serupa:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Google telah memperkenalkan dependensi AndroidX baru . Anda perlu bermigrasi ke AndroidX, itu sederhana.

Saya mengganti semua dependensi ke dependensi AndroidX

Ketergantungan desain lama

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

Ketergantungan desain AndroidX baru

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

Anda dapat menemukan dependensi AndroidX di sini https://developer.android.com/jetpack/androidx/migrate


Opsi migrasi AndroidX otomatis (didukung di android studio 3.3+)

Migrasikan proyek yang ada untuk menggunakan AndroidX dengan memilih Refactor> Migrate to AndroidX dari bilah menu.


1
implementasi 'com.google.android.material: material: 1.1.0-alpha05' ini adalah versi baru
Hitesh Tarbundiya

apa yang harus diletakkan selain 'import android.support.design.widget.TabLayout;' ?
temirbek

6

1. Tambahkan kode ini ke app / build.gradle Anda:

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

2. SDK dan alat yang dimodifikasi versi ke 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2. Di file AndroidManifest.xml Anda, Anda harus menambahkan dua baris:

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

Terima kasih atas jawaban @Carlos Santiago: Pustaka dukungan desain Android untuk API 28 (P) tidak berfungsi


Solusi ini tidak sesuai untuk masa depan, karena Anda seharusnya menggunakan AndroidX sekarang. Aplikasi Lama yang diterbitkan harus ditingkatkan sekarang. Jika banyak pengerjaan ulang, perubahan tersebut tetap harus dilakukan.
Abhinav Saxena

@Abhinav Saxena Anda benar, kami harus memperbarui proyek kami menjadi 28 lebih baik daripada menyelesaikan masalah ini dengan versi SDK lama. :)
Codios

ini adalah jawaban yang diterima, Setelah banyak saran, tidak ada yang membantu saya, Tapi ini membantu saya sebagai configurations.all {}. Anda menyelamatkan hari saya, terima kasih.
Noor Hossain

5

Perpustakaan dukungan desain untuk androidX adalah implementation 'com.google.android.material:material:1.0.0'


4

buka file gradle.properties dan tambahkan dua baris ini ke dalamnya:

android.useAndroidX = true
android.enableJetifier = true

bersihkan dan bangun


1
useAndroidX memberi tahu kompiler untuk pengguna androidx. file alih-alih paket dukungan Android lama
Lena Bru

Ini mengarahkan Studio 3.2 dan yang lebih baru untuk bermigrasi ke AndroidX. Semua pustaka yang telah bermigrasi ke AndroidX harus diperbaiki dalam ketergantungan.
Abhinav Saxena

3

Catatan: Anda tidak boleh menggunakan dependensi com.android.support dan com.google.android.material di aplikasi Anda secara bersamaan.

Tambahkan Komponen Material untuk Android di file build.gradle (aplikasi) Anda

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

Jika aplikasi Anda saat ini bergantung pada Design Support Library asli, Anda dapat menggunakan opsi Refactor to AndroidX… yang disediakan oleh Android Studio. Melakukan hal itu akan memperbarui dependensi dan kode aplikasi Anda untuk menggunakan pustaka androidx dan com.google.android.material yang baru dikemas.

Jika Anda belum ingin beralih ke paket androidx dan com.google.android.material baru, Anda dapat menggunakan Komponen Material melalui dependensi com.android.support:design:28.0.0-alpha3.


3

Pertama-tama, Anda harus melihat gradle.properties dan nilai-nilai ini harus benar . Jika Anda tidak dapat melihatnya, Anda harus menulis.

android.useAndroidX=true
android.enableJetifier=true

Setelah itu Anda bisa menggunakan dependensi AndroidX di build.gradle Anda (Module: app) . Selain itu, Anda harus memeriksa compileSDKVersion dan targetVersion . Mereka harus minimal 28. Misalnya saya menggunakan 29.

Jadi, contoh ketergantungan androidx:

implementation 'androidx.cardview:cardview:1.0.0'

Namun hati-hati karena semuanya tidak dimulai dengan androidx seperti ketergantungan cardview . Misalnya, ketergantungan desain lama adalah:

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

Tetapi ketergantungan desain baru adalah:

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

Jadi, Anda harus mencari dan membaca dengan cermat. Kode bahagia.

@bayu_joo


2

Saya melewati situasi itu dengan mengganti semua androidx.*menjadi appropiate package name.

ubah baris Anda

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'

untuk

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'

DICATAT

  • hapus tools:replace="android:appComponentFactory"dari AndroidManifest

0

Kode di bawah bekerja sempurna dengan saya:

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

Coba ini:

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

0

Dokumentasi Android menjelaskan hal ini dengan jelas. Buka halaman di bawah ini. Di bawahnya, ada dua kolom dengan nama "OLD BUILD ARTIFACT" dan "AndroidX build artifact"

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

Sekarang Anda memiliki banyak dependensi dalam gradle. Cukup cocokkan yang memiliki artefak build Androidx dan ganti di gradle.

Itu tidak akan cukup.

Buka MainActivity Anda (ulangi ini untuk semua aktivitas) dan hapus kata AppCompact Activity dalam pernyataan "public class MainActivity extends AppCompatActivity" dan tulis kata yang sama lagi.Tapi kali ini pustaka androidx diimpor.Sampai sekarang, file dukungan appcompact diimpor dan used (juga, hapus pernyataan import appcompact itu).

Juga, buka file tata letak Anda. Misalkan Anda memiliki tata letak batasan, maka Anda dapat melihat bahwa tata letak batasan baris pertama dalam file xml memiliki sesuatu yang terkait dengan appcompact. Jadi hapus saja dan tulis tata letak Batasan lagi. Tapi sekarang tata letak batasan terkait androidx ditambahkan.

ulangi ini untuk banyak aktivitas dan sebanyak file layout xml ..

Tapi jangan khawatir: Android Studio menampilkan semua kemungkinan kesalahan seperti itu saat mengompilasi.


0

Punya masalah serupa. Ditambahkan dalam build.gradle dan itu berhasil untuk saya.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

jika Anda ingin menyelesaikan masalah ini tanpa bermigrasi ke AndroidX (Saya tidak merekomendasikannya)

masalah penggabungan manifes ini terkait dengan salah satu ketergantungan Anda menggunakan androidX.

Anda perlu mengurangi versi rilis dependensi ini. untuk kasus saya:

Saya menggunakan google atau firebase

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

Saya harus menguranginya 15.0.1 untuk digunakan di pustaka dukungan.


0

Menambahkan androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'karya untuk saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.