发现多个文件 OS 独立路径 'META-INF/proguard/androidx-annotations.pro'

More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro'

我正在尝试 android WorkManager, The code is throwing error "More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro" when running, I tried the following ,但没有帮助。

WorkManager Dependencies

build.gradle(应用程序)

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"
}

目前这是一个已知问题,Architecture Components Release Notes 概述该问题并提供解决方案,直到 alpha10 版本的工作管理器库:

Known Issue

If you run into the following issue: "More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro'", please put the following in your gradle file as a temporary workaround while we fix the issue in alpha10:

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

因此,在您的情况下,android 部分应如下所示:

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'
    }
}

问题应该在 1.0.0-alpha10 版本的 WorkManager 中得到妥善解决。

可以在 build.gradle(app) 中使用添加(由 回答)

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

或将 android.arch.work 版本降级为 1.0.0-alpha08

dependencies {
    implementation 'android.arch.work:work-runtime:1.0.0-alpha08'
}

当我将以下内容添加到我的应用程序的 build.gradle 依赖项部分时,我遇到了同样的错误:

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

Migration to AndroidX之后:

  1. 在 Android Studio 中,从 Refactor 菜单中,select Migrate 至 AndroidX...
  2. 最好选中将项目备份为 zip 文件的选项,以防万一 迁移失败,
  3. 然后在单击 迁移 之后,您将可以选择位置 保存 zip 备份。

现在我可以毫无问题地构建了。


我的设置

Android Studio 3.2.1
JRE: 1.8.0_152-release-1136-b06 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains
macOS 10.13.6

将此添加到我的应用 build.gradle 文件中解决了我的问题。

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'
  }
}

就我而言,我通过设置 androidx.room 使用与 androidx.lifecycle

相同的版本来解决问题

作为初学者,我在一些教程中使用预制项目时遇到了这个问题,上面的解决方案对我不起作用。

万一有人遇到同样的问题。

我必须升级 build.gradle 项目文件中的 gradle 版本:

buildscript {

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

然后我不得不在 gradle-wrapper.properties 中升级 gradle 包装器:

#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

然后,我在 gradle.properties 文件中将 useAndroidX 设置为 true:

android.useAndroidX=true

就是这样。希望对你有帮助。

始终首先寻找 Gradle 中的实现。 也许两个实现相互冲突..也许你没有删除卡片视图 v7,并添加了 androidx 卡片视图,类似的东西比你尝试其他东西。

我就是这种情况,删除旧的实现解决了问题。

Nenad 编码愉快