Sklonowałem repozytorium github, ponieważ chciałem przestudiować kod, ale kiedy próbowałem go zbudować w Android Studio, miałem pewne problemy. Po dodaniu repozytorium google maven (zgodnie z monitem Android Studio) i zaktualizowaniu zarówno wersji wtyczki Gradle, jak i wersji ocen (odpowiednio do wersji 3.5.2 i 5.4.1), kompilacja kończy się niepowodzeniem z powodu następującego błędu:
Przyczyna: zduplikowany wpis: META-INF / MANIFEST.MF
A ściślej mówiąc:
Przyczyna: java.util.zip.ZipException: zduplikowany wpis: META-INF / MANIFEST.MF
Oto plik build.gradle mojego projektu:
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url 'https://maven.google.com'
}
}
}
Oto mój moduł build.gradle plik (przed próbą czegokolwiek):
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.thelittlenaruto.supportdesignexample"
minSdkVersion 11
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation ('com.android.support:appcompat-v7:22.2.1')
implementation ('com.android.support:design:22.2.1')
implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
}
Oto, co próbowałem do tej pory:
- Dodanie następującego do sekcji Androida mojego pliku build.gradle modułu:
sourceSets {
main{
java{
exclude '**/META-INF/MANIFEST'
exclude '**/META-INF/MANIFEST.MF'
exclude 'META-INF/MANIFEST'
exclude 'META-INF/MANIFEST.MF'
exclude '!META-INF/MANIFEST.MF'
}
}
}
- Dodanie tego:
sourceSets.main.res.filter.exclude 'META-INF/MANIFEST'
sourceSets.main.res.filter.exclude 'META-INF/MANIFEST.MF'
- Także to:
packagingOptions {
apply plugin: 'project-report'
exclude '**/META-INF/MANIFEST'
exclude '**/META-INF/MANIFEST.MF'
exclude 'META-INF/MANIFEST'
exclude 'META-INF/MANIFEST.MF'
exclude '!META-INF/MANIFEST.MF'
}
- I to:
packagingOptions {
pickFirst '**/META-INF/MANIFEST'
pickFirst '**/META-INF/MANIFEST.MF'
pickFirst 'META-INF/MANIFEST'
pickFirst 'META-INF/MANIFEST.MF'
pickFirst '!META-INF/MANIFEST.MF'
}
- To:
aaptOptions {
ignoreAssetsPattern "!META-INF/MANIFEST.MF"
ignoreAssetsPattern "META-INF/MANIFEST.MF"
}
Myślę, że próbowałem głównie wszystkiego w tym pytaniu: Jak wykluczyć niektóre pliki z kompilacji stopni Android Studio?
Nic nie działało.
Po znalezieniu rozwiązania wydaje mi się, że problem polega na tym, że zduplikowałem zależności. Próbowałem więc:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation ('com.android.support:appcompat-v7:22.2.1'){
exclude module: 'support-v4'
}
implementation ('com.android.support:design:22.2.1')
implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
}
I to:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation ('com.android.support:design:22.2.1'){
exclude module: 'support-v7'
}
implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
}
Nadal pojawia się ten sam błąd.
Czy ktoś mógłby mi powiedzieć, co robię źle? Z góry dziękuję :)
źródło
Odpowiedzi:
Jak powiedział Rajen Raiyarela , przejdź do Plik-> Struktura projektu-> Projekt-> Wersja wtyczki Gradle dla Androida i zmień jej wersję z 3.5.2 na 3.5.1.
źródło
Ustaw zależności projektu na:
lub najnowszy.
Uwaga: w ten sposób mój problem został rozwiązany.
źródło
Ten problem występuje z powodu zduplikowanych zależności.
Sprawdź wiele zależności w aplikacji Gradle.
źródło
Spakuj go raz lub wcale:
źródło