Połączenie manifestu nie powiodło się: uses-sdk: minSdkVersion 14

233

Od czasu pobrania najnowszego zestawu SDK i zainstalowania aplikacji Android Studio mój projekt się nie buduje. Otrzymuję następujący komunikat:

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
loeschg
źródło
Mam ten sam błąd Błąd: Wykonanie nie powiodło się dla zadania „: app: processDebugManifest”. > Połączenie manifestu nie powiodło się: uses-sdk: minSdkVersion 19 nie może być mniejsza niż wersja 19 zadeklarowana w bibliotece
com.android.support:support-v4:21.0.0-rc1
Dostaję ten sam wyjątek minSdkVersion 15 nie może być mniejszy niż wersja 15. Narzędzia kompilacji SDK zostały zaktualizowane, więc myślę, że to błąd w Android Studio i nowych narzędziach kompilacji
Boardy
1
Wygląda na to, że jest to błąd: code.google.com/p/android/issues/detail?id=72430 Na teraz poprawka polega na komentowaniu linii w maven-metadata.xml
Emanuel Canha

Odpowiedzi:

312

Uwaga: Zostało to zaktualizowane w celu odzwierciedlenia wydania API 21, Lollipop. Pobierz najnowszy zestaw SDK.

W jednym z moich modułów miałem następujące polecenie build.gradle:

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

Zmieniam to na

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

naprawiono problem.

Upewnij się, że nie com.android.support:support-v4:+włączasz ogólnie ani żadnych innych bibliotek pomocniczych (v7, v13, appcompat itp.) W dowolnym miejscu w swoim projekcie.

Zakładam, że problemem jest pobranie najnowszej wersji L kandydatav4:+ do wydania (21.0.0-rc1), która oczywiście wymaga L SDK.

Edytować:

Jeśli potrzebujesz użyć nowych widoków (CardView, RecyclerView i Paleta), powinny działać następujące czynności:

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"

(Kredyty dla EddieRingle na / androiddev - http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/ )

Kolejna edycja

Pamiętaj, aby zobaczyć odpowiedź @ murtuza poniżej dotyczącą appcompat-v7 i głosować, jeśli to pomoże!

loeschg
źródło
3
Co z biblioteką skompilowaną z Maven? Jak wykluczyć „starą” zależność?
Arnaud
4
@Arnaud compile („blah: blah: bla”) {wyklucz grupę: „com.android.support”, moduł: „support-v4”}
AndroidGecko
3
Pamiętaj, że aby korzystać z CardView, RecyclerView i Palette, musisz również zmienić swój manifest, aby uniknąć rzucania stopni konfliktu scalenia. Zobacz ten link, aby uzyskać szczegółowe informacje: reddit.com/r/androiddev/comments/297xli/…
Michel
3
Nigdy nie sugeruj, aby ludzie używali + w wersji zależności. ZAWSZE określ dokładną wersję biblioteki, z której chcesz korzystać (lub jest dostępna w momencie pisania kodu). Nawet 20+ jest złe. A jeśli biblioteka, na której polegasz, postępuj zgodnie z tą ZŁĄ praktyką, rozważ wykluczenie jej zależności i dostarczenie własnej wersji tej zależności. Dzięki temu kompilacja będzie odtwarzalna w dowolnym momencie. Popraw swoją odpowiedź. Kup, usuwając sugestię użycia + w wersji zależności.
Daniele Segato
1
Co powiedział @DanieleSegato. Nigdy nie zalecamy dynamicznej wersji. To złe praktyki.
Xavier Ducrohet
69

Ponadto w przypadku importowania biblioteki appcompat-v7 upewnij się, że oznaczyłeś numer wersji na końcu w następujący sposób:

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

Po zmianie tylko wersji Support-v4 nadal pojawia się błąd:

Połączenie manifestu nie powiodło się: uses-sdk: minSdkVersion 15 nie może być mniejsza niż wersja L zadeklarowana w bibliotece com.android.support:support-v4:21.0.0-rc1

To było trochę mylące, ponieważ wygląda na to, że v4 nadal stanowi problem, ale w rzeczywistości ograniczenie wersji appcompat v7 naprawiło problem.

Murtuza
źródło
Dobry chwyt! żadna z moich v7 też nie miała na nich wersji.
RoundSparrow hilltx
a także to samo dla wsparcia v13)
Defuera
1
Miałem też niedopasowanie appcompat_v7, buildToolsVersion '20.0.0'w moim android{}i compile 'com.android.support:appcompat-v7:20.0+'moim dependencies {}nie było to samo, więc uczyniłem je takimi samymi (jak pokazano tutaj).
Azurespot
1
Używanie + identyfikatora dla przyszłych wersji jest złą praktyką . Podaj dokładną wersję. Proponuję zaktualizować „com.android.support:appcompat-v7:19.+” do tego „com.android.support:appcompat-v7:19.0.0” lub który jest najnowszy. Jeśli nadal występują problemy, spróbuj zaktualizować bibliotekę pomocy z menedżera SDK.
sud007
55

Rozwiązanie 1:

Zmień uses-sdk do <uses-sdk tools:node="replace" />i dodać xmlns:tools="http://schemas.android.com/tools" wAndroidManifest.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>

Upewnij się, że używasz stopnia 0.11 i wyższego, aby korzystać z połączenia Manifest.

Rozwiązanie 2:

  • Zmieni compile 'com.android.support:support-v4:+'się compile 'com.android.support:support-v4:20.+'w build.gradle. Zapobiegnie to korzystaniu z gradacji v4:21.0.0wymagającej wersji L.

  • Jeśli jednak którakolwiek z zewnętrznych zależności używa tego samego. Prawdopodobnie będziesz musiał poczekać, aż zaktualizują to samo.

Rozwiązanie 3:

  • Usuń / skomentuj <version>21.0.0-rc1</version>w swoim pliku<android-sdk>/extras/android/m2repository/com/android/support-v4/maven-metadata.xml

  • Powtórz to samo dla support-v7

Gaurav Arora
źródło
W moim przypadku musiałem również usunąć odpowiednik appcompat-v7.
eipipuz
2
Tak, nie dostarczaj rozwiązania 2 jako opcji. Właściwe zarządzanie zależnościami (przy użyciu właściwej wersji) lub strategia rozwiązywania problemów jest właściwym rozwiązaniem. Edycja repozytorium maven opóźnia problem tylko do momentu wydania nowego repozytorium.
Xavier Ducrohet
Rozwiązanie 1 + 3 uratowało mi życie :)
Climbatize
2
Pierwsza opcja działa! Sugeruję dodanie kilku szczegółów na temat tego, dlaczego należy to zrobić.
Tejasvi Hegde
24
<uses-sdk tools:node="replace" />

Nie działa.

zmień uses-sdkna

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

i dodaj
xmlns:tools="http://schemas.android.com/tools" w pliku AndroidManifest.xml

użytkownik M1433372
źródło
Jak przedstawiono tutaj: tools.android.com/tech-docs/new-build-system/user-guide/…
IgorGanapolsky
Dziękuję @ userM1433372, głosowałem za uratowanie mojego dnia :)
Ravi Vaniya
11

Problem wciąż pojawia się w zależnościach przechodnich. Gradle oferuje sposób wymuszenia użycia określonej wersji zależności.

Na przykład możesz dodać coś takiego:

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

do twojego build.gradle.

Jeśli chcesz dowiedzieć się więcej na temat strategii rozwiązywania problemów, zapoznaj się z tym przewodnikiem http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

Znalazłem to podczas czytania odpowiedniego problemu, który tu link

koesclem
źródło
Dzięki! Łatwiej niż wprowadzenie wykluczenia w każdej zależności :)
Sloy,
8

W pliku build.gradle domyślnie była to kompilacja „com.android.support:support-v4:+”, więc przy budowaniu gradcit należy wziąć pod uwagę com.android.support:support-v4:21.0.0-rc1 z powodu ostatniej wersji zapoznawczej dewelopera L.

Wprowadź zmiany w poniższym wierszu, aby rozwiązać problem. Zmiana

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

do

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

Podobnie, gdy używasz biblioteki obsługi v7-appcompat, dokonaj zmiany z

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

do

compile 'com.android.support:appcompat-v7:20.+'.
Bhargav Jhaveri
źródło
8

Dodając do poprawnych odpowiedzi powyżej, problem może nadal występować z powodu zagnieżdżania bibliotek. W takim przypadku spróbuj wykonać poniższy przykład:

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'
}
Leonardo Cardoso
źródło
7

w przypadku osób tworzących aplikacje hybrydowe przy użyciu interfejsu Cordova CLI to polecenie pomoże:

cordova build android -- --minSdkVersion=15

tak, używa podwójnych podwójnych myślników, tak jak to widziałeś.

ProllyGeek
źródło
Czy to rozwiązuje rzeczywisty problem? Nie. Działa tylko tak, ale z cordova run androidtym się nie udaje.
Ionut Necula,
@lonut czy wiesz, na czym polega rzeczywisty problem?
ProllyGeek
W moim przypadku problemem jest wtyczka, której używam, o nazwie cordova-plugin-facebook4. Po zainstalowaniu cordova run androiddziała dobrze. Niestety nigdzie nie znalazłem rozwiązania tego problemu. Próbowałem ręcznie dodać minSdkVersionsiebie w, AndroidManifestale jest zastępowany. Wciąż próbuję to rozgryźć.
Ionut Necula,
@lonut Używam tej samej wtyczki w jakiejś aplikacji, nad którą pracuję, daj mi znać, czy mogę pomóc. Musisz jednak przejrzeć plik build.gradle, może jeśli podasz dodatkowe informacje, mogę pomóc.
ProllyGeek
I w końcu rozwiązany przez zmianę minSdkwersji do 15w config.xml. Linia: <preference name="android-minSdkVersion" value="14" />. W ten sposób AndroidManifestplik jest aktualizowany także o nową wersję.
Ionut Necula,
6

Miałem również ten sam problem, a zmiana następujących pomogła mi:

z:

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

do:

dependencies {
 compile 'com.android.support:support-v4:20.0.0'
}
min2bro
źródło
to nie jest kod. musisz wprowadzić tę zmianę w pliku build.gradle.
min2bro
6

W przypadku osób, które zmagają się z tym problemem w wersji beta Android Studio , zaakceptowana odpowiedź nie rozwiązała mojego problemu. Podczas importowania projektu pobranego z GitHub w pliku build.gradle aplikacji pojawił się następujący komunikat o błędzie:

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

Ale w folderze biblioteki zewnętrznej mam ten folder:

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

Rozwiązałem powyższy problem, zmieniając zależność na:

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

Uwaga: może być konieczne pobranie poziomu interfejsu API niższego niż obecnie dostępny w Android Studio, aby niektóre biblioteki i projekty działały poprawnie.

Nielegalny argument
źródło
Wydaje się, że jest to podstawowy problem: „gdziekolwiek zobaczysz„ com.android.support:support ”„… ”upewnij się, że masz aktualną wartość„ To mniej więcej jej wielkość!
Fattie
5

Rozwiązałem problem, edytując poniższy wiersz w build.gradle i działa! :-)

dodanie wersji 20. + ”

Z

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

Do

dependencies {
    compile 'com.android.support:appcompat-v7:20.+'
}
Cristiana Chavez
źródło
1
Nie mogę w to uwierzyć. Żadna z powyższych odpowiedzi nie działała dla mnie, z wyjątkiem tej. Dziękuję Ci!!! Uwaga: musiałem zmienić zarówno moje pliki, jak v4i v7pliki pomocnicze na :20.+.
Azurespot
5
compile('com.android.support:support-v4:19.1.0'){
    force = true
}

Pomógł mi zabrany stąd

Lina Shyshova
źródło
4

Musisz skonfigurować wszystkie funkcje obsługi i biblioteki appcompat w wersji 19. +

Jeśli zalecenie pozostawienia biblioteki pomocy technicznej w wersji 19. + nie działa, możesz wypróbować następną wskazówkę w pliku AndroidManifest.

Najpierw dodaj ten kod:

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

A potem na poziomie aplikacji (nie wewnątrz aplikacji!)

<uses-sdk tools:node="replace" />
Aracem
źródło
4

Robię tutaj wszystkie rozwiązania bez rezultatu, więc patrzę w inne miejsce i znalazłem sposób na oszukanie IDE, więc musisz umieścić linię na Mainfest, aby Gradle używał innego, tego, który nakładasz na build.gradle linia jest następująca:

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

tylko to i działa.

Mam nadzieję, że to pomoże.

David Moreno Cantero
źródło
3
pamiętaj, aby dodać: xmlns:tools="http://schemas.android.com/tools"w <manifest>-tag
seb
3

Musisz usunąć z build.gradle compile 'com.android.support:support-v13:+'

Igor Kostenko
źródło
3

Oto nowy błąd zgłoszony dla tego btw https://code.google.com/p/android/issues/detail?id=72430

Zakładając, że korzystasz z repozytorium wsparcia, obejściem tego problemu jest skomentowanie lub usunięcie wiersza

21.0.0-rc1 w lokalnym pliku listy repozytoriów Maven pod adresem /extras/android/m2repository/com/android/support-v4/maven-metadata.xml

LemonGentry
źródło
1

Dla mnie taki problem został rozwiązany przez zmianę

minSdkVersion 14

W pliku build.gladdle i użyj pliku określonego w komunikacie o błędzie

ale problem był

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

Zmieniłem więc z 14 na 15 w pliku build.gladdle i działa

Spróbuj.

Ruberandinda Cierpliwość
źródło
1

Po prostu wybierz wymaganą, minSdkVersiontj. Zmień na potrzebną W moim przypadku minSdkVersionbyła 14.

Zmiana minSdkVersion 16rozwiązania problemu

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"
    }
Kim
źródło
0

Nie zapomnij, powinieneś edytować build.gradle w podfolderze „app” swojego projektu, a nie w folderze projektu. Straciłem dzień roboczy, próbując rozwiązać problem z wersją „L”.

CoolMind
źródło
0

Spróbuj usunąć foldery kompilacji w swoim projekcie i ponownie zsynchronizuj projekt stopni, aby go odbudować. Ponadto, jak inni powiedzieli w tym poście - zamiast robić coś takiego:

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

Zrób to:

compile 'com.android.support:support-v4:19.1.0'
Igor Ganapolski
źródło
0

Dziękuję @Murtuza. Twoja odpowiedź pomogła mi rozwiązać mój problem, ale w moim przypadku

compile 'com.android.support:support-v13:19.+ również wraz z

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

z compile 'com.android.support:support-v4:+' compile 'com.android.support:support-v7:+' compile 'com.android.support:support-v13:+' Hope może to komuś pomóc

Deepthi
źródło
0

Mam kilka projektów, w których wolę celować w L.MR1 (SDKv22) i niektóre projekty, w których wolę KK (SDKv19). Twój wynik może być inny, ale to zadziałało dla mnie.

// 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:+'
}
OS1
źródło
0

W Android Studio 1.1.0: Plik - Struktura projektu - Tab Smaki - Wybierz Min. Wersję SDK, która jest wyższa niż w Manifeście

ea_
źródło
0

Mam drugie rozwiązanie:

  1. rozpakuj https://dl.dropboxusercontent.com/u/16403954/android-21.zipdosdk\platforms\
  2. zmień build.gradle jak

    compileSdkVersion 21
    buildToolsVersion "20.0.0"
    
    defaultConfig {
        applicationId "package.name"
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
  3. Dodaj

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

    w Manifeście z xmlns:tools="schemas.android.com/tools";

  4. Iść do sdk\extras\android\m2repository\com\android\support\support-v4\21.0.0-rc1\

rozpakuj support-v4-21.0.0-rc1.aar i edytuj AndroidManifest.xml jak

z

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

do

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

PS Możesz to zrobić ze wszystkimi potrzebnymi bibliotekami wsparcia.

Vova K.
źródło
Zmieniłem
literę
0

Jedyne, co działało dla mnie, to:

W project.properties zmieniłem:

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

abelabbesnabi
źródło
0

Po prostu zmieniasz minimalny poziom API z Build Settings -> Player Settings -> Other Settings -> Minimum SDK Levelna wyższą wersję.

Codemaker
źródło
0

Najlepszym sposobem jest pozwolenie Android Studio rozwiązać problem.

Zrobiłem poniżej i działało dobrze.

  1. Otwórz swój projekt w Android Studio, błędy będą wyskakujące, jeśli podany jest link do naprawy, kliknij go.

  2. Ponownie otwórz projekt w Android Studio, błędy będą wyskakujące, tym razem będzie link, jeśli nie zostanie podany w kroku 1, kliknij dany link, aby go naprawić.

Pamiętaj, że obie operacje trwały kilka minut, ale naprawiono wszystkie problemy.

Manohar Reddy Poreddy
źródło
0

Rozwiązanie: połączenie manifestu nie powiodło się Aplikacja atrybutu @ ppComponentFactory ...

Jeśli korzystasz z najnowszych i najlepszych bibliotek Firebase lub innych bibliotek, te faktycznie używają AndroidaX zamiast android.support, możesz mieć problem, ponieważ połączenie manifestu nie powiodło się !! W takim przypadku projekt musi zostać migrowany do systemu AndroidX. Więc skorzystaj z linku: https://firebase.google.com/support/release-notes/android#update_-_june_17_2019

Lub obejrzyj ten film. https://youtu.be/RgveQ4AY1L8 Dziękuję.

Subhojit Halder
źródło
Link do rozwiązania jest mile widziany, ale powinieneś upewnić się, że Twoja odpowiedź jest przydatna bez niego. Lepiej jest dodać kontekst wokół linku i opisać najistotniejszą część samouczka, do którego prowadzi link, na wypadek gdyby strona docelowa była niedostępna.
Joey
Miło cię słyszeć #Joey. Dodaję dodatkowy opis. Dzięki.
Subhojit Halder