Ho clonato un repository github perché volevo studiare il codice, ma quando ho provato a costruirlo in Android Studio, ho riscontrato qualche problema. Dopo aver aggiunto il repository di google maven (come richiesto da Android Studio) e aver aggiornato la versione del plug-in Gradle e la versione di grado (rispettivamente alla 3.5.2 e alla 5.4.1), la compilazione non riesce a causa del seguente errore:
Causa: voce duplicata: META-INF / MANIFEST.MF
E questo, per essere più specifici:
Causato da: java.util.zip.ZipException: voce duplicata: META-INF / MANIFEST.MF
Ecco il mio file build.gradle a livello di progetto:
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'
}
}
}
Ecco il mio file build.gradle del modulo (prima di provare qualsiasi cosa):
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'
}
Ecco cosa ho provato finora:
- Aggiungendo quanto segue alla sezione Android del mio file build.gradle del mio modulo:
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'
}
}
}
- Aggiungendo questo:
sourceSets.main.res.filter.exclude 'META-INF/MANIFEST'
sourceSets.main.res.filter.exclude 'META-INF/MANIFEST.MF'
- Anche questo:
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'
}
- E questo:
packagingOptions {
pickFirst '**/META-INF/MANIFEST'
pickFirst '**/META-INF/MANIFEST.MF'
pickFirst 'META-INF/MANIFEST'
pickFirst 'META-INF/MANIFEST.MF'
pickFirst '!META-INF/MANIFEST.MF'
}
- Questo:
aaptOptions {
ignoreAssetsPattern "!META-INF/MANIFEST.MF"
ignoreAssetsPattern "META-INF/MANIFEST.MF"
}
Penso di aver provato principalmente tutto in questa domanda: come escludere determinati file dalle build di Android Studio Gradle?
Niente ha funzionato.
Dopo aver cercato una soluzione, penso che il problema sia che ho dipendenze duplicate. Quindi ho provato quanto segue:
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'
}
E questo:
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'
}
Ottengo ancora lo stesso errore.
Qualcuno potrebbe dirmi cosa sto facendo di sbagliato? Grazie in anticipo. :)