Thư viện hỗ trợ thiết kế Android cho API 28 (P) không hoạt động


106

Tôi đã định cấu hình môi trường SDK android-P thành công. Khi tôi cố gắng sử dụng thư viện hỗ trợ thiết kế android, tôi gặp phải lỗi xây dựng dự án. Cấu hình dự án là:

IDE: 3.2 Canary 17 API mục tiêu: 28 API biên dịch: 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'
}

Và lỗi xây dựng không thành công là:

Hợp nhất tệp kê khai không thành công: Giá trị thuộc tính ứng dụng @ appComponentFactory = (androidx.core.app.CoreComponentFactory) từ [androidx.core: core: 1.0.0-alpha3] AndroidManifest.xml: 22: 18-86 cũng có mặt tại [com.android .support: support-compat: 28.0.0-alpha3] AndroidManifest.xml: 22: 18-91 value = (android.support.v4.app.CoreComponentFactory). Đề xuất: thêm 'tools: Replace = "android: appComponentFactory"' vào phần tử tại AndroidManifest.xml: 6: 5-40: 19 để ghi đè.


Bạn đã kiểm tra câu trả lời này chưa: stackoverflow.com/a/54825603/1318946
Pratik Butani

Câu trả lời:


89

Bạn có thể sử dụng phiên bản tạo tác gói API trước đó hoặc Androidx mới, không bao giờ sử dụng cả hai.

Nếu bạn muốn sử dụng phiên bản trước, hãy thay thế phần phụ thuộc của bạn bằng

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

nếu bạn muốn sử dụng 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
Câu trả lời này nên được chấp nhận. Thông tin thêm trên medium.com/mindorks/…
Rawa

Tại sao nó comkhông được thay thế trong materialtrong implementation?
RoCk RoCk

58

Cập nhật quan trọng

Android sẽ không cập nhật các thư viện hỗ trợ sau đó 28.0.0.

Đây sẽ là bản phát hành tính năng cuối cùng trong bao bì android.support và các nhà phát triển được khuyến khích chuyển sang AndroidX 1.0.0 .

Vì vậy, hãy sử dụng thư viện AndroidX .

  • Không sử dụng cả Hỗ trợAndroidX trong dự án.
  • Mô-đun thư viện hoặc phần phụ thuộc của bạn vẫn có thể có các thư viện hỗ trợ. Androidx Jetifier sẽ xử lý nó.
  • Sử dụng phiên bản ổn định của androidxhoặc bất kỳ thư viện nào, vì alpha, beta, rc có thể có lỗi mà bạn không muốn gửi cùng ứng dụng của mình.

Trong trường hợp của bạn

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

thật kỳ lạ, dự án của tôi đã ở trên P từ rất lâu, nhưng nó bắt đầu đưa ra lỗi thư viện hỗ trợ hôm nay khi tôi xây dựng. Có điều gì tôi thiếu ở đây không?
Talha

Đó là lỗi phổ biến mà tất cả chúng ta đều phải đối mặt hàng ngày, tôi phải đối mặt với nó vài ngày một lần khi chạy dự án. Chỉ cần làm Hợp lệ bộ nhớ cache và khởi động lại.
Khemraj

@Talha Hãy thử từ menu Build> Clear Project, sau đó Build> Make Project trước, đôi khi điều này là đủ, nếu không thì hãy Làm mất hiệu lực bộ nhớ cache và khởi động lại, vì việc vô hiệu hóa bộ nhớ cache và khởi động lại mất rất nhiều thời gian và xóa bộ nhớ cache cho tất cả các dự án.
John

43

Thêm điều này:

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

đến ứng dụng kê khai của bạn

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

hy vọng nó giúp


Bạn có gì trong @string/action_settings?
Aliton Oliveira

Tôi đã có một vấn đề: nhiều hơn một tệp đã được tìm thấy với hệ điều hành độc lập path 'META-INF / androidx.core_core.version
Aliton Oliveira

Lỗi sau khi thêm 2 dòng: * 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
Bạn đã thêm xmlns: tools = " schemas.android.com/tools " bên trong tiêu đề AndroidManifest.xml chưa?
Carlos Santiago

2
Manifest dưới android / src / debug / có tiêu đề tương tự:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
user938363


9

Google đã giới thiệu các phụ thuộc AndroidX mới . Bạn cần chuyển sang AndroidX, thật đơn giản.

Tôi đã thay thế tất cả các phụ thuộc thành các phụ thuộc AndroidX

Phụ thuộc thiết kế cũ

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

Phụ thuộc thiết kế AndroidX mới

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

bạn có thể tìm thấy các phụ thuộc AndroidX tại đây https://developer.android.com/jetpack/androidx/migrate


Tùy chọn di chuyển AndroidX tự động (được hỗ trợ trên android studio 3.3+)

Di chuyển một dự án hiện có để sử dụng AndroidX bằng cách chọn Refactor> Migrate to AndroidX từ thanh menu.


1
thực hiện 'com.google.android.material: material: 1.1.0-alpha05' đây là phiên bản mới
Hitesh Tarbundiya

những gì cần đặt thay vì 'nhập android.support.design.widget.TabLayout;' ?
temirbek

6

1.Đã thêm các mã này vào app / build.gradle của bạn:

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

2. sdk được sửa đổi và phiên bản công cụ thành 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

2. Trong tệp AndroidManifest.xml, bạn nên thêm hai dòng:

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

Cảm ơn câu trả lời @Carlos Santiago: Thư viện hỗ trợ thiết kế Android cho API 28 (P) không hoạt động


Giải pháp này không tuân thủ trong tương lai, vì bạn sẽ sử dụng AndroidX ngay bây giờ. Các ứng dụng cũ đã được xuất bản nên được nâng cấp ngay bây giờ. Nếu phải làm lại nhiều, những thay đổi đó vẫn nên được thực hiện.
Abhinav Saxena

@Abhinav Saxena Bạn nói đúng, chúng tôi nên cập nhật dự án của mình lên 28 tốt hơn là giải quyết vấn đề này với phiên bản SDK cũ. :)
Codios

đây là câu trả lời được chấp nhận, Sau rất nhiều đề xuất, không có gì giúp được tôi, Nhưng điều này đã giúp tôi là cấu hình.all {}. Bạn đã cứu ngày của tôi, cảm ơn.
Noor Hossain

5

Thư viện hỗ trợ thiết kế cho androidX là implementation 'com.google.android.material:material:1.0.0'


4

mở tệp gradle.properties và thêm hai dòng sau vào nó:

android.useAndroidX = true
android.enableJetifier = true

dọn dẹp và xây dựng


1
useAndroidX thông báo trình biên dịch cho người dùng androidx. các tệp thay vì gói hỗ trợ Android cũ
Lena Bru

Điều này hướng dẫn Studio 3.2 trở lên chuyển sang AndroidX. Tất cả các thư viện đã chuyển sang AndroidX sẽ được sửa trong các phần phụ thuộc.
Abhinav Saxena

3

Lưu ý: Bạn không nên sử dụng đồng thời các phần phụ thuộc com.android.support và com.google.android.material trong ứng dụng của mình.

Thêm thành phần Material cho Android trong tệp build.gradle (ứng dụng) của bạn

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

Nếu ứng dụng của bạn hiện phụ thuộc vào Thư viện hỗ trợ thiết kế ban đầu, bạn có thể sử dụng tùy chọn Refactor thành AndroidX… do Android Studio cung cấp. Làm như vậy sẽ cập nhật mã và phụ thuộc của ứng dụng để sử dụng các thư viện androidx và com.google.android.material mới được đóng gói.

Nếu bạn chưa muốn chuyển sang các gói androidx và com.google.android.material mới, bạn có thể sử dụng Material Components thông qua phần phụ thuộc com.android.support:design:28.0.0-alpha3.


3

Trước hết, bạn nên xem gradle.properties và các giá trị này phải đúng . Nếu bạn không thể nhìn thấy chúng, bạn phải viết.

android.useAndroidX=true
android.enableJetifier=true

Sau đó, bạn có thể sử dụng các phụ thuộc AndroidX trong build.gradle (Mô-đun: ứng dụng) của mình . Ngoài ra, bạn phải kiểm tra biên dịchSDKVersiontargetVersion . Chúng phải tối thiểu là 28. Ví dụ, tôi đang sử dụng 29.

Vì vậy, một ví dụ phụ thuộc androidx:

implementation 'androidx.cardview:cardview:1.0.0'

Tuy nhiên hãy cẩn thận vì mọi thứ không bắt đầu với androidx như sự phụ thuộc cardview . Ví dụ: phụ thuộc thiết kế cũ là:

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

Nhưng sự phụ thuộc của thiết kế mới là:

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

Vì vậy, bạn phải tìm kiếm và đọc cẩn thận. Mã hạnh phúc.

@canerkaseler


2

Tôi vượt qua tình huống đó bằng cách thay thế tất cả androidx.*thành appropiate package name.

thay đổi dòng của bạn

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'

đến

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'

GHI CHÚ

  • xóa tools:replace="android:appComponentFactory"khỏi AndroidManifest

0

Mã dưới đây hoạt động hoàn hảo với tôi:

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

Thử cái này:

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

0

Tài liệu Android đã rõ ràng về điều này. Hãy truy cập trang bên dưới. Bên dưới, có hai cột có tên "OLD BUILD ARTIFACT""AndroidX build Artifact"

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

Bây giờ bạn có nhiều phụ thuộc trong gradle, chỉ cần so khớp những phụ thuộc với tạo tác xây dựng Androidx và thay thế chúng trong gradle.

Như vậy sẽ không đủ.

Truy cập MainActivity của bạn (lặp lại thao tác này cho tất cả các hoạt động) và xóa từ AppCompact Activity trong câu lệnh "public class MainActivity mở rộng AppCompatActivity" và viết lại cùng một từ. Nhưng lần này thư viện androidx đã được nhập. đã sử dụng (đồng thời xóa câu lệnh nhập appcompact đó).

Ngoài ra, hãy chuyển đến tệp bố cục của bạn. Giả sử bạn có một bố cục ràng buộc, sau đó bạn có thể nhận thấy rằng bố cục ràng buộc dòng đầu tiên trong tệp xml có một cái gì đó liên quan đến appcompact, vì vậy chỉ cần xóa nó và viết lại bố cục Ràng buộc.

lặp lại điều này cho bao nhiêu hoạt động và bao nhiêu tệp bố cục xml ..

Nhưng đừng lo lắng: Android Studio hiển thị tất cả các lỗi có thể xảy ra trong khi biên dịch.


0

Đã gặp vấn đề tương tự. Đã thêm vào build.gradle và nó hoạt động với tôi.

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

nếu bạn muốn giải quyết vấn đề này mà không cần chuyển sang AndroidX (tôi không khuyên bạn nên làm như vậy)

vấn đề hợp nhất tệp kê khai này có liên quan đến một trong những phụ thuộc của bạn bằng cách sử dụng androidX.

bạn cần giảm phiên bản phát hành của phụ thuộc này. đối với trường hợp của tôi:

Tôi đang sử dụng google hoặc firebase

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

Tôi phải giảm nó xuống 15.0.1 để sử dụng trong thư viện hỗ trợ.


0

Đang thêm androidTestImplementation 'androidx.test:runner:1.2.0-alpha05'công việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.