Android: Gặp lỗi "Không hợp nhất tệp kê khai" sau khi cập nhật lên phiên bản gradle mới


108

Sau khi chấp nhận cập nhật dự án lên phiên bản gradle mới, tôi gặp lỗi này:

Error:Execution failed for task ':app:processDebugManifest'.
Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.0-alpha1) from [com.android.support:cardview-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38
    is also present at [com.android.support:design:25.3.1] AndroidManifest.xml:27:9-31 value=(25.3.1).
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:22:5-24:41 to override.

Làm thế nào tôi có thể giải quyết vấn đề này? Đây là build.gradletệp ứng dụng của tôi :

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.sample.bookReader"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    ...
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:multidex:+'
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile 'com.android.support:cardview-v7:26.0.0-alpha1'
    compile 'com.android.support:design:25+'
    compile 'com.jakewharton:butterknife:8.2.1'
    apt 'com.jakewharton:butterknife-compiler:8.2.1'
    ...
}

Và đây là dự án build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://www.jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Làm cách nào để khắc phục lỗi này trong khi vẫn duy trì các thay đổi được thực hiện bằng cách cập nhật phiên bản gradle?

Câu trả lời:


212

Đặt cái này ở cuối build.gradle ứng dụng của bạn:

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '25.3.0'
            }
        }
    }
}

Tín dụng cho Eugen Pechanec


1
Nice one, đây là giải pháp mà làm việc cho tôi khi xây dựng ứng dụng nativescript tôi
ded

7
Điều này cũng làm việc cho tôi, cảm ơn @Vishal. Bạn có thể chỉ giải thích những gì đang xảy ra ở đây :)
Ismail Iqbal

3
Đảm bảo sử dụng phiên bản mới nhất của thư viện hỗ trợ, tại thời điểm viết bài này details.useVersion '27.0.0'. Nếu không, bạn sẽ không có các tính năng hỗ trợ mới nhất, chẳng hạn như loại bỏ truyền chế độ xem dư thừa.
Drew Szurko

9
Vui lòng thêm mô tả bit về nó. Làm việc của nó, nhưng nó sẽ làm việc cho các tính năng phiên bản và cập nhật
Ghanshyam Nayma

1
Nếu bất cứ ai khác đã có 'Không thể giải quyết Symbol DependencyResolveDetails' lỗi, tôi cố định nó bằng cách loại bỏ 'DependencyResolveDetails' (Tôi đọc ở đâu đó trên StackOverflow về việc không cần nó từ Groovy của nó, vì vậy nó có thể tự động làm việc nó ra)
knjk04

90

Bạn đang sử dụng nhiều phiên bản của Thư viện hỗ trợ Android:

compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
compile 'com.android.support:cardview-v7:26.0.0-alpha1'
compile 'com.android.support:design:25+'

Hai là 26.0.0-alpha1, và một đang sử dụng 25+.

Chọn một phiên bản cụ thể và sử dụng nó cho cả ba phiên bản này. Vì compileSdkVersionkhông phải của bạn O, hãy sử dụng 25.3.1cho cả ba thư viện này, dẫn đến:

compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:cardview-v7:25.3.1'
compile 'com.android.support:design:25.3.1'

sử dụng 25.3.1cho thư viện hỗ trợ hoặc buildToolsVersion? vì buildToolsVersiontôi gặp lỗiPackage Unavailable
tux-world

@ tux-world: "sử dụng 25.3.1 cho thư viện hỗ trợ hoặc buildToolsVersion?" - cho các thư viện hỗ trợ. Xem câu trả lời cập nhật của tôi.
CommonsWare

1
Tôi kiểm tra điều đó, nhưng sự cố của tôi không giải quyết được, phiên bản nào phải trên compileSdkVersion?
tux-world

tôi nhận được tin nhắn nàyAll com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 26.0.0-alpha1, 25.3.1. Examples include com.android.support:support-compat:26.0.0-alpha1 and com.android.support:animated-vector-drawable:25.3.1
tux-world

1
@ tux-world: Không có gì trong bạn build.gradlenên đề cập đến 26.0.0-alpha1nữa. Hãy thử làm sạch dự án của bạn (Xây dựng> Dự án sạch) và xem sự cố có biến mất hay không. Nếu không, bạn sẽ cần theo dõi những gì đang kéo đến com.android.support:support-compat:26.0.0-alpha1, chẳng hạn như bằng cách chạy báo cáo phụ thuộc Gradle.
CommonsWare

18

Tôi đã thay đổi tất cả các phiên bản thư viện hỗ trợ thành 25.3.1 và hoạt động như một sự quyến rũ:

compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'

Bạn cũng cần thay đổi compileSdkVersiontargetSdkVersion thành 25:

compileSdkVersion 25
targetSdkVersion 25

đồng ý, câu trả lời ở trên tốt, nhưng lý do của lỗi là bạn đặt các phiên bản khác nhau trong tệp gradle của mình. Chỉ cần sử dụng hoặc hỗ trợ 26 hoặc 25
Andrew V.

Trong trường hợp của tôi là vì minSdkVersion.
Trái cây

10

Bạn có thể tìm ra thư viện nào phụ thuộc vào phiên bản thư viện hỗ trợ sai và loại trừ nó như sau:

compile ('com.stripe:stripe-android:5.1.1') {
    exclude group: 'com.android.support'
  }

stripe-android trong trường hợp của tôi.


Làm thế nào để bạn tìm ra?
Zapnologica

@Zapnologica cố gắng liệt kê các phụ thuộc nhiệm vụ gradle, như stackoverflow.com/questions/21645071/…
paynd

6

Tôi không sử dụng các phiên bản thư viện khác nhau và gặp lỗi tương tự, nó đã xảy ra sau khi xóa buildToolsVersiontrong AS RC 1, nhưng việc thêm tools:node="replace" đã thực hiện thủ thuật, chỉ cần thêm điều này vào <application ..../>khối bên trong tệp kê khai.xml của bạn :

<meta-data 
 tools:node="replace"
 android:name="com.google.android.gms.version"
 android:value="@integer/google_play_services_version" />

1
Có bất kỳ tác dụng phụ nào khi làm điều này không? Nó vẫn hoạt động với bạn với Android Studio 3 mới chứ?
Sakiboy

5

Nó cũng xảy ra điều tương tự với tôi. Xem trên Gradle -> Build Gradle -> và đảm bảo rằng tính tương thích khớp trong cả hai dòng biên dịch "app compat" và "support design", chúng phải có cùng một phiên bản.

Sau đó, để cực kỳ chắc chắn rằng nó sẽ khởi chạy mà không có vấn đề gì, hãy đi tới Tệp -> Cấu trúc dự án -> ứng dụng và kiểm tra tab phù hợp với phiên bản Công cụ xây dựng, nó phải giống với dòng biên dịch hỗ trợ của bạn, đề phòng trường hợp tôi đặt phiên bản SDK mục tiêu 25 cũng như trên tab Hương vị.

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-
   core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    *compile 'com.android.support:appcompat-v7:25.3.1'*
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    *compile 'com.android.support:design:25.3.1'*
}

Đó là những gì tôi đã làm và làm việc. Chúc may mắn!


3
  • Cập nhật thư viện hỗ trợ của bạn lên phiên bản mới nhất

  • Mở Manifest Filevà thêm nó vào Tệp kê khai

  • <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/>

  • Và thêm cho Recyclerview trong >> build.gradle Module app:

  • compile 'com.android.support:recyclerview-v7:25.3.1'

  • Và bấm vào: Sync Now


3

Tôi giải quyết điều đó bằng cách đặt điều này vào cuối build.gradle mô-đun ứng dụng của mình:

    configurations.all {
     resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '26.0.0'
        }
    }
  }
}

Bạn đã làm ngày của tôi vui lên.
Hamed Jaliliani

2

Câu trả lời được chấp nhận nhưng một điều bạn cũng có thể làm là xác định các thư viện từ cấu trúc dự án của bạn. Những gì bạn có thể làm là:

  1. Nhận xét tất cả các thư viện mà vấn đề đang đến
  2. Chuyển cấu trúc dự án của bạn
  3. Thêm thư viện từ đó và nó sẽ tự động đồng bộ hóa và sự cố sẽ giải quyết.
  4. Nếu sự cố vẫn tiếp diễn, hãy thử xem từ nhật ký lỗi xem nó đang yêu cầu thư viện nào sau khi làm theo tất cả 3 bước trên.

Điều gì sẽ xảy ra là các thư viện được xác định trước bị tắt ngay bây giờ tôi đang sử dụng appcompat: 26.0.0-alpha1 nó sử dụng phiên bản cũ hơn của những thứ khi bạn thêm nội dung mới và cố gắng giải quyết nó bằng những thứ cũ. Khi bạn thêm nó từ cấu trúc dự án của mình, nó sẽ thêm thứ tương tự nhưng với những thứ mới để giải quyết nó. Vấn đề của bạn sẽ được giải quyết.


0

Lỗi đối với tôi là:

Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:percent:26.0.2] AndroidManifest.xml:25:13-35
    is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override.

Giải pháp cho tôi là trong tệp Gradle dự án của tôi, tôi cần tạo phiên bản com.google.gms: google-services của mình.

Tôi đang sử dụng phiên bản 3.1.1:

classpath 'com.google.gms:google-services:3.1.1

Và lỗi đã được giải quyết sau khi tôi chuyển nó sang phiên bản 3.2.1:

classpath 'com.google.gms:google-services:3.2.1

Tôi vừa nâng cấp tất cả các thư viện của mình lên phiên bản mới nhất, bao gồm v27.1.1 của tất cả các thư viện hỗ trợ và v15.0.0 của tất cả các thư viện Firebase khi tôi gặp lỗi.


0

Tôi đã cập nhật dự án Android cũ cho Wear OS. Tôi đã gặp thông báo lỗi này khi xây dựng dự án:

Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:percent:26.0.2] AndroidManifest.xml:25:13-35
is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override.

Ứng dụng build.gradle for Wear của tôi chứa các phần phụ thuộc sau:

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.android.support:wearable:2.4.0'
implementation 'com.google.android.gms:play-services-wearable:16.0.1'
compileOnly 'com.google.android.wearable:wearable:2.4.0'}

GIẢI PHÁP :

Thêm implementation 'com.android.support:support-v4:28.0.0'vào các phụ thuộc đã giải quyết vấn đề của tôi.


0

Thử xóa dữ liệu meta và xây dựng lại dự án.


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.