Sáp nhập đơn giản không thành công: used-sdk: minSdkVersion 14


233

Kể từ khi tải xuống SDK mới nhất và cài đặt Android Studio, dự án của tôi không thể xây dựng. Tôi nhận được thông báo sau:

Error:Gradle: Execution failed for task ':SampleProject:processProdDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version L declared in library com.android.support:support-v4:21.0.0-rc1

Tôi đang gặp lỗi tương tự Lỗi: Thực thi không thành công cho nhiệm vụ ': app: processDebugManifest'. > Việc sáp nhập đơn giản không thành công: used-sdk: minSdkVersion 19 không thể nhỏ hơn phiên bản 19 được khai báo trong thư viện com.android.support:support-v4:21.0.0-rc1
bulk.dhillon

Tôi nhận được cùng một ngoại lệ minSdkVersion 15 không thể nhỏ hơn phiên bản 15. Các công cụ SDK Build đã được cập nhật nên tôi đoán đó là một lỗi trong Android Studio và các công cụ Build mới
Boardy

1
Đây có vẻ là một lỗi: code.google.com/p/android/issues/detail?id=72430 Cách khắc phục bây giờ là nhận xét một dòng trong maven-metadata.xml
Emanuel Canha

không thể sao chép việc sáp nhập Manifest:
used

Câu trả lời:


312

Lưu ý: Điều này đã được cập nhật để phản ánh việc phát hành API 21, Lollipop. Hãy chắc chắn tải xuống SDK mới nhất.

Trong một trong các mô-đun của tôi, tôi đã có các phần sau trong build.gradle:

dependencies {
    compile 'com.android.support:support-v4:+'
}

Thay đổi điều này thành

dependencies {
    // do not use dynamic updating.
    compile 'com.android.support:support-v4:21.0.0' 
}

đã khắc phục sự cố.

Hãy chắc chắn rằng bạn không bao gồm chung com.android.support:support-v4:+hoặc bất kỳ thư viện hỗ trợ nào khác (v7, v13, appcompat, v.v.), ở bất cứ đâu trong dự án của bạn.

Tôi cho rằng vấn đề là v4:+chọn ra bản phát hành L mới nhất của ứng viên phát hành (21.0.0-RC1) mà rõ ràng cần có L SDK.

Biên tập:

Nếu bạn cần sử dụng các chế độ xem mới (CardView, RecyclerView và Palette), các cách sau sẽ hoạt động:

compile "com.android.support:cardview-v7:21.0.0"
compile "com.android.support:recyclerview-v7:21.0.0"
compile "com.android.support:palette-v7:21.0.0"

(Tín dụng cho EddieRingle trên / androiddev - http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/ )

Chỉnh sửa khác

Hãy chắc chắn để xem câu trả lời của @ murtuza bên dưới về appcompat-v7 và upvote nếu nó giúp!


3
Còn một thư viện được biên soạn từ Maven thì sao? Làm thế nào để loại trừ sự phụ thuộc "cũ"?
Arnaud

4
@Arnaud biên dịch ("blah: blah: bla") {loại trừ nhóm: 'com.android.support', mô-đun: 'support-v4'}
AndroidGecko

3
Lưu ý rằng để sử dụng CardView, RecyclerView và Palette, bạn cũng sẽ phải thay đổi Bản kê khai của mình để tránh các cú ném lớp xung đột hợp nhất. Xem liên kết này để biết chi tiết: reddit.com/r/androiddev/comments/297xli/iêu
Michel

3
Không bao giờ, đề nghị mọi người sử dụng + trong phiên bản phụ thuộc. LUÔN LUÔN chỉ định phiên bản chính xác của thư viện bạn muốn sử dụng (hoặc có sẵn tại thời điểm bạn viết mã). Thậm chí 20. + là xấu. Và nếu một thư viện bạn phụ thuộc vào việc thực hiện BAD này, hãy xem xét loại trừ sự phụ thuộc của nó và cung cấp phiên bản phụ thuộc của riêng bạn. Điều này làm cho bản dựng của bạn có thể tái tạo bất cứ lúc nào. Vui lòng cải thiện câu trả lời của bạn mua loại bỏ đề xuất của bạn để sử dụng + trong phiên bản phụ thuộc.
Daniele Segato

1
Những gì @DanieleSegato nói. Không đề xuất phiên bản động bao giờ. Đó là thực hành xấu.
Xavier Ducrohet

69

Ngoài ra, trong trường hợp bạn đang nhập thư viện appcompat-v7, hãy đảm bảo bạn gắn thẻ số phiên bản ở cuối của nó như sau:

compile 'com.android.support:support-v4:19.+'
compile 'com.android.support:appcompat-v7:19.+'

Sau khi chỉ thay đổi phiên bản support-v4, tôi vẫn nhận được lỗi:

Việc sáp nhập đơn giản không thành công: used-sdk: minSdkVersion 15 không thể nhỏ hơn phiên bản L được khai báo trong thư viện com.android.support:support-v4:21.0.0-rc1

Có một chút khó hiểu vì có vẻ như v4 vẫn là vấn đề, nhưng trên thực tế, việc hạn chế phiên bản appcompat v7 đã khắc phục vấn đề.


Nắm bắt tốt! không ai trong số v7 của tôi có phiên bản trên chúng cả.
RoundSparrow hilltx

và cũng là điều tương tự cho hỗ trợ v13)
Defuera

1
Tôi cũng có một sự không phù hợp của appcompat_v7, buildToolsVersion '20.0.0'trong tôi android{}compile 'com.android.support:appcompat-v7:20.0+'tôi dependencies {}không giống nhau, vì vậy tôi đã làm cho chúng giống nhau (như được hiển thị ở đây).
Azurespot

1
Đó là một thực tế xấu để sử dụng + định danh cho các phiên bản trong tương lai. Chỉ định phiên bản chính xác. Tôi đề nghị cập nhật 'com.android.support:appcompat-v7:19.+' thành 'com.android.support:appcompat-v7:19.0.0' hoặc đây là phiên bản mới nhất. Nếu bạn vẫn gặp phải sự cố, hãy thử cập nhật thư viện hỗ trợ từ trình quản lý SDK.
sud007

55

Giải pháp 1:

Thay đổi sử dụng-sdk thành <uses-sdk tools:node="replace" />và thêm xmlns:tools="http://schemas.android.com/tools" vàoAndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.demo.android"
    android:versionCode="16"
    android:versionName="3.3.1">
    .
    .
    <uses-sdk tools:node="replace" />
    .
    .
</manifest>

Hãy chắc chắn rằng bạn sử dụng lớp 0.11 trở lên để sử dụng sáp nhập Manifest.

Giải pháp 2:

  • Thay đổi compile 'com.android.support:support-v4:+'thành compile 'com.android.support:support-v4:20.+'trong build.gradle. Điều này sẽ ngăn lớp sử dụng v4:21.0.0yêu cầu phiên bản L.

  • Tuy nhiên, nếu bất kỳ phụ thuộc bên ngoài của bạn sử dụng như nhau. Bạn có thể sẽ phải chờ họ cập nhật giống nhau.

Giải pháp 3:

  • Xóa / Nhận xét <version>21.0.0-rc1</version>trong tệp của bạn<android-sdk>/extras/android/m2repository/com/android/support-v4/maven-metadata.xml

  • Lặp lại tương tự cho support-v7


Trong trường hợp của tôi, tôi cũng đã phải gỡ bỏ appcompat-v7 tương đương.
eipipuz

2
Có, không cung cấp giải pháp 2 như một tùy chọn. Quản lý phụ thuộc đúng cách (sử dụng đúng phiên bản) hoặc sử dụng chiến lược giải quyết là giải pháp phù hợp. Chỉnh sửa repo maven chỉ trì hoãn vấn đề cho đến khi một repo mới được phát hành.
Xavier Ducrohet

Giải pháp 1 + 3 đã cứu mạng tôi :)
Leo lên

2
Tùy chọn đầu tiên hoạt động! Tôi sẽ đề nghị bạn thêm một số chi tiết về lý do tại sao điều này sẽ được thực hiện.
Tejasvi Hegde

24
<uses-sdk tools:node="replace" />

Công việc ngắn hạn.

đổi uses-sdksang

<uses-sdk tools:overrideLibrary="com.packagename.of.libary.with.conflict" />

và thêm
xmlns:tools="http://schemas.android.com/tools" vào tệp AndroidManifest.xml



Cảm ơn bạn @ userM1433372, được ủng hộ vì đã cứu ngày của tôi :)
Ravi Vaniya

11

Vấn đề vẫn phát sinh với sự phụ thuộc quá độ. Gradle cung cấp một cách để buộc sử dụng một phiên bản cụ thể của một phụ thuộc.

Ví dụ: bạn có thể thêm một cái gì đó như:

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:20.+'
        force 'com.android.support:appcompat-v7:20.+'
    }
}

để xây dựng của bạn. nâng cấp.

Nếu bạn muốn tìm hiểu thêm về các chiến lược phân giải lớp, hãy tham khảo hướng dẫn này http://www.gradle.org/docs/civerse/dsl/org.gradle.api.artifacts.ResolutionStrargety.html

Tôi tìm thấy điều này trong khi đọc vấn đề tương ứng mà tôi sẽ liên kết ở đây


Cảm ơn! Dễ dàng hơn việc loại trừ trong mọi phụ thuộc :)
Sloy

8

Trong tệp build.gradle, theo mặc định, nó sẽ biên dịch 'com.android.support:support-v4:+' vì vậy khi bạn xây dựng dự án gradle sẽ xem xét, com.android.support:support-v4:21.0.0-rc1 bởi vì bản phát hành xem trước của nhà phát triển L gần đây.

Thực hiện thay đổi trong dòng sau và nó sẽ giải quyết vấn đề. Thay đổi

compile 'com.android.support:support-v4:+' 

đến

compile 'com.android.support:support-v4:20.+'

Tương tự như vậy khi sử dụng thư viện hỗ trợ v7-appcompat, hãy thay đổi từ

compile 'com.android.support:appcompat-v7:+'

đến

compile 'com.android.support:appcompat-v7:20.+'.

8

Thêm vào các câu trả lời đúng ở trên, vấn đề vẫn có thể xảy ra do lồng thư viện. Trong trường hợp này, hãy thử làm ví dụ dưới đây:

compile 'com.android.support:support-v4:20.+'
compile ('com.github.chrisbanes.actionbarpulltorefresh:extra-abs:+') { // example
    exclude group: 'com.android.support', module:'support-v4'
    exclude group: 'com.android.support', module:'appcompat-v7'
}

7

đối với những người xây dựng ứng dụng lai bằng cordova CLI, lệnh này sẽ giúp:

cordova build android -- --minSdkVersion=15

vâng, nó sử dụng dấu gạch ngang kép như bạn đã thấy.


Điều này có giải quyết được vấn đề thực tế không? Không. Nó chỉ hoạt động như vậy, nhưng với cordova run androidnó thất bại.
Iovy Necula

@lonut bạn có biết vấn đề thực tế là gì không?
ProllyGeek

Trong trường hợp của tôi, vấn đề là một plugin tôi đang sử dụng được gọi cordova-plugin-facebook4. Unistalling nó làm cho cordova run androidcông việc tốt. Thật không may, tôi đã không tìm thấy bất kỳ giải pháp cho điều này bất cứ nơi nào. Tôi đã cố gắng tự thêm minSdkVersionbản thân mình vào AndroidManifestnhưng đang bị ghi đè. Vẫn đang cố để giải quyết.
Iovy Necula

@lonut Tôi đang sử dụng cùng một plugin trong một số ứng dụng tôi đang làm việc, hãy cho tôi biết nếu tôi có thể giúp đỡ. Tuy nhiên, bạn cần xem lại tệp build.gradle, có thể nếu bạn cung cấp thêm thông tin tôi có thể giúp đỡ.
ProllyGeek

Cuối cùng tôi giải quyết nó bằng cách thay đổi các minSdkphiên bản để 15config.xml. Dòng : <preference name="android-minSdkVersion" value="14" />. Bằng cách này, AndroidManifesttập tin đang được cập nhật cũng với phiên bản mới.
Iovy Necula

6

Tôi cũng có vấn đề tương tự và thay đổi sau đây đã giúp tôi:

từ:

dependencies {
    compile 'com.android.support:support-v4:+'

đến:

dependencies {
 compile 'com.android.support:support-v4:20.0.0'
}

Nó không phải là một mã. bạn cần thực hiện thay đổi này trong tệp build.gradle của mình.
min2bro

6

Đối với những người gặp phải vấn đề này trong phiên bản Android Studio beta, câu trả lời được chấp nhận không giải quyết được vấn đề của tôi. Nhập một dự án được tải xuống từ GitHub, tôi đã có phần sau trong tệp build.gradle của ứng dụng gây ra lỗi trong câu hỏi:

 dependencies {
    compile 'com.android.support:support-v4:+'
}

Nhưng trong thư mục thư viện bên ngoài của tôi, tôi có thư mục này:

support-v4-21.0.0-rc1 //note the 21

Tôi đã giải quyết vấn đề trên bằng cách thay đổi sự phụ thuộc thành:

dependencies {
compile 'com.android.support:support-v4:20.+' //20 used less than available strange but works
}

Lưu ý: bạn cũng có thể cần tải xuống cấp độ api thấp hơn mức hiện có trong Android Studio để một số thư viện và dự án hoạt động đúng.


Đây dường như là vấn đề cơ bản: "bất cứ nơi nào bạn thấy 'com.android.support:support'" ... "đảm bảo bạn có giá trị cập nhật" Đó là về kích thước của nó!
Fattie

5

Tôi đã giải quyết vấn đề bằng cách chỉnh sửa dòng bên dưới trong build.gradle và nó hoạt động! :-)

thêm phiên bản 20. + '

Từ

 dependencies {
        compile 'com.android.support:appcompat-v7:+'
    }

Đến

dependencies {
    compile 'com.android.support:appcompat-v7:20.+'
}

1
Tôi không thể tin được. Không có câu trả lời nào khác ở trên làm việc cho tôi, ngoại trừ câu trả lời này. Cảm ơn bạn!!! Lưu ý, tôi đã phải thay đổi cả tập tin của tôi v4v7hỗ trợ thành :20.+.
Azurespot


4

Bạn phải định cấu hình tất cả các thư viện hỗ trợ và ứng dụng với phiên bản 19. +

Nếu đề xuất rời khỏi thư viện hỗ trợ với phiên bản 19. + không hoạt động, bạn có thể thử mẹo tiếp theo trong tệp AndroidManifest của mình.

Đầu tiên thêm mã này:

xmlns:tools="http://schemas.android.com/tools"

Và sau đó, ở cấp ứng dụng (không phải bên trong ứng dụng!)

<uses-sdk tools:node="replace" />

4

Tôi thực hiện tất cả các giải pháp ở đây mà không có kết quả, vì vậy tôi tìm ở một nơi khác và tôi đã tìm ra cách để lừa IDE, vì vậy bạn phải đặt một dòng trong Mainfest để làm cho Gradle sử dụng một cách khác, một bạn đặt vào build.gradle dòng là:

<uses-sdk tools:node="replace" />

Chỉ cần nó, và nó hoạt động.

Tôi hy vọng nó sẽ giúp.


3
nhớ thêm: xmlns:tools="http://schemas.android.com/tools"trong <manifest>-tag
SEB

3

Bạn cần xóa khỏi build.gradle compile 'com.android.support:support-v13:+'



1

Đối với tôi, vấn đề như thế này được giải quyết bằng cách thay đổi

minSdkVersion 14

Trong tệp build.gladdle và sử dụng tệp được chỉ định trong thông báo lỗi

nhưng vấn đề là

Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version 15 declared in library

Vì vậy, tôi đã thay đổi từ 14 thành 15 trong tệp build.gladdle và nó hoạt động

hãy thử một lần.


1

Chỉ cần nhắm mục tiêu yêu cầu minSdkVersiontức là thay đổi thành cần thiết Trong trường hợp của tôi minSdkVersion14.

Thay đổi để minSdkVersion 16giải quyết vấn đề

compileSdkVersion 29
    defaultConfig {
        applicationId "e.futaaapp"
        minSdkVersion 14
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

compileSdkVersion 29
    defaultConfig {
        applicationId "e.futaaapp"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

0

Đừng quên, bạn nên chỉnh sửa build.gradle trong thư mục con 'ứng dụng' của dự án của bạn, không phải trong thư mục của dự án. Tôi đã mất một ngày làm việc để cố gắng giải quyết vấn đề với phiên bản "L".


0

Hãy thử xóa (các) thư mục xây dựng trong dự án của bạn và đồng bộ lại dự án lớp của bạn để xây dựng lại nó. Ngoài ra, như những người khác đã nói trong bài đăng này - thay vì làm một cái gì đó như thế này:

compile 'com.android.support:support-v4:19.+'

làm cái này:

compile 'com.android.support:support-v4:19.1.0'

0

Cảm ơn bạn @Murtuza. Câu trả lời của bạn đã giúp tôi giải quyết vấn đề của mình nhưng trong trường hợp của tôi

compile 'com.android.support:support-v13:19.+ cũng vậy, cùng với

compile 'com.android.support:support-v4:19.+' compile 'com.android.support:appcompat-v7:19.+'

từ compile 'com.android.support:support-v4:+' compile 'com.android.support:support-v7:+' compile 'com.android.support:support-v13:+' Hy vọng điều này có thể giúp một số người


0

Tôi có một số dự án mà tôi thích nhắm mục tiêu L.MR1 (SDKv22) và một số dự án mà tôi thích KK (SDKv19). Kết quả của bạn có thể khác, nhưng điều này làm việc cho tôi.

// Targeting L.MR1 (Android 5.1), SDK 22
android {
    compileSdkVersion 22
    buildToolsVersion "22"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 22
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // google support libraries (22)
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:cardview-v7:21.0.3'
    compile 'com.android.support:recyclerview-v7:21.0.3'
}



// Targeting KK (Android 4.4.x), SDK 19
android {
    compileSdkVersion 19
    buildToolsVersion "19.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // google libraries (19)
    compile 'com.android.support:support-v4:19.1+'
    compile 'com.android.support:appcompat-v7:19.1+'
    compile 'com.android.support:cardview-v7:+'
    compile 'com.android.support:recyclerview-v7:+'
}

0

Trong Android Studio 1.1.0: Tệp - Cấu trúc dự án - Hương vị tab - Chọn Phiên bản SDK tối thiểu cao hơn trong Bản kê khai


0

Tôi có giải pháp thứ hai:

  1. giải nén https://dl.dropboxusercontent.com/u/16403954/android-21.zipđểsdk\platforms\
  2. thay đổi build.gradle như

    compileSdkVersion 21
    buildToolsVersion "20.0.0"
    
    defaultConfig {
        applicationId "package.name"
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
  3. thêm vào

    <uses-sdk tools:node="replace" /> 

    trong Bản kê khai với xmlns:tools="schemas.android.com/tools";

  4. Đi đến sdk\extras\android\m2repository\com\android\support\support-v4\21.0.0-rc1\

giải nén hỗ trợ-v4-21.0.0-rc1.aar và chỉnh sửa AndroidManifest.xml như

từ

<uses-sdk
        android:minSdkVersion="L"
        android:targetSdkVersion="L" />

đến

<uses-sdk
        android:minSdkVersion="4"
        android:targetSdkVersion="21" />

PS Bạn có thể làm điều này với tất cả các thư viện hỗ trợ cần.


Tôi đã thay đổi "L" và khởi động lại studio android nhưng gặp vấn đề tương tự khi xây dựng dự án (ctrl + f9)
Ankur Loriya

0

Điều duy nhất làm việc cho tôi là:

Trong project.properies, tôi đã thay đổi:

cordova.system.l Library.1 = com.android.support: support-v4: + to cordova.system.l Library.1 = com.android.support: support-v4: 20. +


0

Bạn chỉ cần thay đổi Cấp API tối thiểu từ Build Settings -> Player Settings -> Other Settings -> Minimum SDK Levelmột số phiên bản cao hơn.


0

Cách tốt nhất là để Android Studio khắc phục sự cố.

Tôi đã làm như dưới đây, và nó hoạt động tốt.

  1. Mở dự án của bạn trong Android Studio, lỗi sẽ xuất hiện, nếu có một liên kết được đưa ra để khắc phục, hãy nhấp vào dự án.

  2. Mở lại dự án của bạn trong Android Studio, lỗi sẽ xuất hiện, lần này sẽ có một liên kết nếu nó không được đưa ra trong Bước 1, nhấp vào liên kết đã cho để sửa nó.

Lưu ý rằng cả hai thao tác mất vài phút, nhưng đã khắc phục tất cả các sự cố.


0

Giải pháp: Việc sáp nhập không thành công Ứng dụng thuộc tính @ ppComponentFactory ...

Nếu bạn đang sử dụng bất kỳ thư viện Firebase mới nhất và lớn nhất hoặc bất kỳ thư viện nào khác, những thư viện đó thực sự đang sử dụng AndroidX thay vì android.support thì bạn có thể gặp sự cố khi sáp nhập Manifest thất bại !! Vì vậy, trong trường hợp này, dự án của bạn cần chuyển sang AndroidX. Vì vậy, hãy theo liên kết: https://firebase.google.com/support/release-notes/android#update_-_june_17_2019

Hoặc xem video này. https://youtu.be/RgveQ4AY1L8 Cảm ơn bạn.


Một liên kết đến một giải pháp được hoan nghênh, nhưng bạn nên đảm bảo câu trả lời của bạn cũng hữu ích mà không có nó. Tốt hơn là thêm ngữ cảnh xung quanh liên kết và mô tả phần có liên quan nhất của hướng dẫn mà bạn liên kết đến trong trường hợp trang đích không khả dụng.
Joey

Rất vui được nghe từ bạn #Joey. Hãy để tôi thêm một số mô tả thêm. Cảm ơn.
Subhojit Halder
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.