在模块类中找到重复的类 android.Support.v4.app.INotificationSideChannel?

我正在开发一个新闻应用,但在 gradle 控制台中遇到了以下错误。

(androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.app.INotificationSideChannel$Stub$Proxy found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.graphics.drawable.IconCompatParcelizer found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.IResultReceiver found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.IResultReceiver$Stub found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.IResultReceiver$Stub$Proxy found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.ResultReceiver found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.ResultReceiver$1 found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.ResultReceiver$MyResultReceiver found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class android.support.v4.os.ResultReceiver$MyRunnable found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class androidx.core.graphics.drawable.IconCompatParcelizer found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class androidx.core.internal.package-info found in modules classes.jar (androidx.core:core:1.0.1) and classes.jar (com.android.support:support-compat:28.0.0)
Duplicate class androidx.versionedparcelable.CustomVersionedParcelable found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.NonParcelField found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelField found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelImpl found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelImpl$1 found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.ParcelUtils found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcel found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcel$1 found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcel$ParcelException found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelParcel found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelStream found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelStream$FieldBuffer found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelStream$InputBuffer found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelable found in modules classes.jar (androidx.versionedparcelable:versionedparcelable:1.0.0) and classes.jar (com.android.support:versionedparcelable:28.0.0)
Duplicate class androidx.versionedparcelable.VersionedParcelize found in modules class

下面是我的 app.gradle 文件

apply plugin: 'com.android.application'


android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}


dependencies {
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'
implementation 'com.github.bassaer:chatmessageview:2.0.1'
implementation 'com.google.code.gson:gson:2.8.5'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
168933 次浏览

您可以在 gradle.properties文件中添加以下2行:

android.useAndroidX=true
android.enableJetifier=true

注意 进行检查,不要重复任何已经存在的行(并确保已经存在的行是 true)。


详情:

如果你想在一个新项目中使用带有 androidx名称空间的库,你需要将编译 SDK 设置为 Android 9.0(API 级别28)或更高,并将上面提到的 Android Gradle 插件标志都设置为 true

android.useAndroidX : 当这个标志设置为 true时,Android 插件使用适当的 AndroidX 库而不是 Support Library。如果未指定,则默认情况下该标志为 false

android.enableJetifier : 当这个标志设置为 true时,Android 插件会自动迁移现有的第三方库,通过重写它们的二进制文件来使用 AndroidX 依赖项。如果未指定,则默认情况下该标志为 false

我遇到了这样的事情,下面是基于我的 另一个答案:

你的项目(或者它的一个子项目)指的是一个使用 +加号的依赖关系,就像 com.google.firebase:firebase-auth:+一样,这意味着,尽可能使用任何更高的版本,新版本不再使用 android.support库,而是使用 androidx; 要解决这个问题,请遵循以下步骤。

步骤:

  1. 确保设置了 ANDROID_HOME环境变量,然后打开控制台窗口(如 git-bash,因为它保留整个命令输出) ,并将 cd打开到项目的 android目录(对于 Ionic 项目,它应该是 platforms/android)。
  2. 首先,通过运行以下命令(在 git-bash 中)实现 列出所有依赖项:
    ./gradlew :app:dependencies
    
  3. 将结果复制到首选的文本编辑器中,然后搜索 androidx
  4. 如果你发现下面的步骤,否则你就完成了! (你不需要重复这些步骤)。
  5. 向上滚动,直到您在任何行的末尾看到 - >,例如 16.0.8 -> 19.0.0+ -> 19.0.0,这都意味着版本是自动解析的(因为 +,所以高于您指定的值)。
  6. 因此,手动设置版本:
    • 如果可能,在您的项目(或子项目)中找到并用特定版本替换 +标志。
    • 或者,强制执行下面提到的依赖项的特定版本(在复制依赖项 id 之后,当然是在前面的步骤中找到的)。
  7. 最后,重复上面的步骤(但不是步骤一,而是控制台 clear)。

要将 强制依赖项的特定版本添加到您的根 build.gradle文件中,如下所示(这对我很有用) ,但是当然要编辑下面的内容,并添加您自己的规则(因为这些规则可能对您的情况不起作用) :

allprojects {
// ...
configurations.all {
resolutionStrategy {
force 'com.google.firebase:firebase-common:17.0.0'
force 'com.google.android.gms:play-services-basement:16.2.0'
force 'com.google.firebase:firebase-iid:16.0.0'
force 'com.google.firebase:firebase-auth:17.0.0'
}
}
}

enter image description here

取自 给你。AndroidX 是一个开源项目,Android 团队使用它在 Jetpack 中开发、测试、打包、版本和发布库。

将这些行添加到 gradle.properties 文件中可以解决“重复类”错误:

android.useAndroidX=true


android.enableJetifier=true

然而,这在我的项目中产生了新的错误:

“包 android.support. 注释不存在”

“找不到符号类碎片”

“包 android.support. v4.content 不存在”

“程序类型已存在”

等等。

然而,这种重构对我很有效:

Migrate your project to AndroidX by selecting Refactor >
"Migrate to AndroidX" from the menu bar.


Select Build > Clean project


Restore Android Studio

现在,我的项目(Match4app)与 AndroidX 一起工作,我能够在 PlayStore 中发布它,没有任何问题。

备注: 这个任务还允许我升级所有其他依赖 AndroidX 的库(比如 com.firebaseui: firebase-ui-auth: 6.0.2,com.google.android.gms: play-services-game: 18.0.1,com.google.android.gms: play-services-auth: 17.0.0,com.google.android.gms: play-services-ads: 18.2.0,等等)。

就像@Ahmed 说的,解决方案是实现 AndroidX,它对我很有效。然而,这不是一个简单的方法,它需要一点耐心... ... 以下是我所做的步骤:

  • 首先,是 非常重要,您可以在不同的分支中执行所有这些更改,或者对项目进行备份。

  • 您需要安卓 Gradle Plugin Version 3.5.1 Class 路径‘ com.android.tools.build: gradle: 3.5.1’ ...

  • 使用 Android Studio Tool: 重构—— > 迁移到 AndroidX..。迁移到 AndroidX
  • 当它完成时,它已经完成了所有相关的修改,但是您可能无法正确地部署项目,因为您发现了任何错误。以下是我发现的问题和解决办法:

  • 如果使用 科特林,在 build.gradle 集中: < code > buildscript { Kotlin _ version =’1.3.10’ ... 和 compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

  • 如果使用 目的地方法,请添加“ file”参数: destination file("$reportsDir/checkstyle/checkstyle.xml")
  • 如果使用 小刀,请使用10.0.0版本

Top-Master 的回答只有在你可以降级到特定版本时才有效。在我的例子中,我有一个 React Nativeapp,我使用的一个库已经迁移到了 AndroidX。之前的版本与 iOS 有些问题,所以我不得不使用最新的版本。我必须做的是:

  1. 将 Android 项目迁移到 AndroidX (重构 > 迁移到 AndroidX)。
  2. 使用 去死吧node_module依赖关系转换为 AndroidX。对于 React Native0.60及以上版本,jetify 是自动运行的,所以您不必安装这个库。

我也遇到过同样的问题,我就是这么解决的

展开 Graddle Scripts,然后转到 Graddle.properties 并添加以下两行

注: 也许第一行 android.useAndroidX = true 已经存在,所以不要重复它。

UseAndroidX = true AbleleJetifier = true

只要在 等级. 属性 文件中添加这两行,

android.useAndroidX=true


android.enableJetifier=true

现在您的项目将不会有任何重复的类错误,并将工作良好,

谢谢你

Solved 只要把你的格拉德尔属性设置成这样就行了

修改模块级 build.gradle 文件以启用 multidex,并添加 multidex 库作为依赖项

android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true
}
...
}


dependencies {
implementation "androidx.multidex:multidex:2.0.1"
}


我也遇到过同样的问题,我就是这么解决的

android.enableJetifier=true

NonTrantiveRClass = true

把这个加到梯度属性上