Znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego „META-INF / proguard / androidx-annotations.pro”

79

Próbuję Android WorkManager , kod generuje błąd „ Znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego„ META-INF / proguard / androidx-annotations.pro ”. Próbowałem następującej odpowiedzi , nie była pomocna.

Zależności WorkManagera

build.gradle (aplikacja)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "rock.dmx.xaro.workmanagerexample"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


}

dependencies {
    def work_version = "1.0.0-alpha09"
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation "android.arch.work:work-runtime:$work_version"
}
bk7
źródło

Odpowiedzi:

167

W tej chwili jest to znany problem, w uwagach do wydania programu Architecture Components przedstawiono opis problemu i rozwiązanie umożliwiające jego naprawienie aż do alpha10wersji biblioteki menedżera pracy:

Znana kwestia

Jeśli napotkasz następujący problem: „Znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego„ META-INF / proguard / androidx-annotations.pro ””, umieść poniższy plik w pliku gradle jako tymczasowe obejście problemu problem w alfa10:

 android {
     packagingOptions {
         exclude 'META-INF/proguard/androidx-annotations.pro'
     }
 }

W twoim przypadku sekcja Androida powinna wyglądać następująco:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "rock.dmx.xaro.workmanagerexample"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    // Temporary fix until alpha10
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Problem powinien zostać poprawnie rozwiązany w 1.0.0-alpha10wersji WorkManager.

TSB99X
źródło
To tylko kolejny przypadek, który pokazuje, jak głupi jest ekosystem programistyczny Androida.
syloc
W moim przypadku musiałem dodać exclude 'META-INF/proguard/coroutines.pro'do opakowania również
opcje
12

Otrzymałem ten sam błąd, gdy dodałem następujące elementy do sekcji zależności build.gradle mojej aplikacji:

implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"

Po migracji na AndroidX :

  1. W Android Studio z menu Refactor wybierz opcję Migrate to AndroidX ...
  2. lepiej sprawdź opcję tworzenia kopii zapasowej projektu jako pliku zip na wypadek niepowodzenia migracji,
  3. a następnie po kliknięciu przycisku Migruj można wybrać lokalizację, w której ma zostać zapisana kopia zapasowa zip.

teraz mogę do tej pory bez problemów budować.


Moja konfiguracja

Android Studio 3.2.1
JRE: 1.8.0_152-release-1136-b06 x86_64
JVM: 64-bitowa maszyna wirtualna serwera OpenJDK firmy JetBrains
macOS 10.13.6

Ahmed AlAskalany
źródło
7

Można użyć add w build.gradle (aplikacja) (na którą odpowiada TheStrikeBone )

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

LUB obniż android.arch.workwersję do1.0.0-alpha08

dependencies {
    implementation 'android.arch.work:work-runtime:1.0.0-alpha08'
}
Ahmad Aghazadeh
źródło
5

Dodanie tego do pliku build.gradle aplikacji rozwiązało mój problem.

android {
  packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/ASL2.0'
  }
}
Gathua Kiragu
źródło
1
czy możesz wyjaśnić więcej, aby zrozumieć? Dzięki.
Shanteshwar Inde
0

W moim przypadku rozwiązuję problem, ustawiając androidx.room na tę samą wersję co androidx.lifecycle

Jenkyn
źródło
0

Jako początkujący miałem ten problem podczas korzystania z gotowego projektu w jakimś tutorialu, a powyższe rozwiązanie nie działa dla mnie.

Więc na wypadek, gdyby ktoś napotkał ten sam problem.

Musiałem zaktualizować wersję gradle w build.gradlepliku dla projektu:

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'        
    }
}
...

Następnie musiałem zaktualizować opakowanie gradle w gradle-wrapper.properties:

#Wed Sep 26 11:30:41 IST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

# Delete this
#distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

# Add this
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

Następnie ustawiłem useAndroidXna true w gradle.propertiespliku:

android.useAndroidX=true

Otóż ​​to. Mam nadzieję, że to pomoże.

Ahmed Shendy
źródło
0

Zawsze szukaj najpierw implementacji w Gradle. może dwie implementacje kolidują ze sobą ... może nie usunąłeś widoku karty v7 i dodałeś widok karty androidx, coś takiego niż próbujesz innych rzeczy.

Mam taką sytuację i usunięcie starej implementacji rozwiązało problem.

Miłego kodowania Nenada

Nenad Štrbić
źródło