任务':app:checkDebugDuplicateClasses'的执行失败。Ionic4安卓

Abd*_*du4 7 android cordova firebase ionic-framework cordova-plugin-fcm

我目前正在处理ionic4应用程序,但是最近在向应用程序添加https://ionicframework.com/docs/native/fcm插件后,在android reall设备上构建该应用程序时,它停止了工作。

起初它抱怨结构密钥,但是我从来没有打算在我的应用程序上使用结构崩溃解决。

错误日志:

* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> 1 exception was raised by workers:
  java.lang.RuntimeException: Duplicate class android.support.v4.app.INotificationSideChannel found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.app.INotificationSideChannel$Stub found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.app.INotificationSideChannel$Stub$Proxy found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.IResultReceiver found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.IResultReceiver$Stub found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.IResultReceiver$Stub$Proxy found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.ResultReceiver found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.ResultReceiver$1 found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.ResultReceiver$MyResultReceiver found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.ResultReceiver$MyRunnable found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)

  Go to the documentation to learn how to <a href="d.android.com/r/tools/classpath-sync-errors">Fix dependency resolution errors</a>.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 21s

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.4.1/userguide/command_line_interface.html#sec:command_line_warnings
35 actionable tasks: 5 executed, 30 up-to-date
cmd: Command failed with exit code 1 Error output:
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> 1 exception was raised by workers:
  java.lang.RuntimeException: Duplicate class android.support.v4.app.INotificationSideChannel found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.app.INotificationSideChannel$Stub found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.app.INotificationSideChannel$Stub$Proxy found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.IResultReceiver found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.IResultReceiver$Stub found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.IResultReceiver$Stub$Proxy found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.ResultReceiver found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.ResultReceiver$1 found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.ResultReceiver$MyResultReceiver found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)
  Duplicate class android.support.v4.os.ResultReceiver$MyRunnable found in modules classes.jar (androidx.core:core:1.0.0) and classes.jar (com.android.support:support-compat:27.1.1)

  Go to the documentation to learn how to <a href="d.android.com/r/tools/classpath-sync-errors">Fix dependency resolution errors</a>.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 21s
[ERROR] An error occurred while running subprocess cordova.

        cordova run android exited with exit code 1.

        Re-running this command with the --verbose flag may provide more information.
Run Code Online (Sandbox Code Playgroud)

android / app / build.gradle

buildscript {
    repositories {
        google()
        jcenter()
        maven { url 'https://maven.fabric.io/public' } // Fabrics Maven repository from cordova-plugin-firebase
    }
    dependencies {

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.android.tools.build:gradle:3.4.0+'
        classpath 'com.google.gms:google-services:4.2.0' // google-services dependency from cordova-plugin-firebase
        classpath 'io.fabric.tools:gradle:1.+' // fabric dependency from cordova-plugin-firebase
    }
}

allprojects {
    repositories {

        jcenter()
        google() // Google's Maven repository from cordova-plugin-firebase
    }
    //This replaces project.properties w.r.t. build settings
    project.ext {
      defaultBuildToolsVersion="28" //String
      defaultMinSdkVersion=19 //Integer - Minimum requirement is Android 4.4
      defaultTargetSdkVersion=28 //Integer - We ALWAYS target the latest by default
      defaultCompileSdkVersion=28 //Integer - We ALWAYS compile with the latest by default
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)

科尔多瓦插件firebase / raihan-build.gradle

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
       classpath 'com.android.tools.build:gradle:3.4.0+'
        classpath 'com.google.gms:google-services:4.2.0'
    }
}


dependencies {
    compile 'me.leolin:ShortcutBadger:1.1.4@aar'
    compile 'com.google.firebase:firebase-auth:+'
    compile('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
       transitive = true
    }
}
cdvPluginPostBuildExtras.add({
    // apply plugin: 'com.google.gms.google-services'
    apply plugin: 'io.fabric'
})
Run Code Online (Sandbox Code Playgroud)

科尔多瓦插件-fcm-与依赖更新/raihan-FCMPlugin.gradle

buildscript {
    repositories {
       google()
        jcenter()
        mavenLocal()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0+'
        classpath 'com.google.gms:google-services:4.2.0'
    }
}
repositories {
    google()
    jcenter()
}
dependencies {
    compile 'com.google.firebase:firebase-core:16.0.8'
}
// apply plugin: 'com.google.gms.google-services'
// class must be used instead of id(string) to be able to apply plugin from non-root gradle file
// apply plugin: com.google.gms.googleservices.GoogleServicesPlugin
Run Code Online (Sandbox Code Playgroud)

android / project.properties

 target=android-27
    android.library.reference.1=CordovaLib
    android.library.reference.2=app
    cordova.gradle.include.1=cordova-android-support-gradle-release/raihan-cordova-android-support-gradle-release.gradle
    cordova.system.library.1=com.squareup.okhttp3:okhttp-urlconnection:3.10.0
    cordova.system.library.2=com.android.support:support-v4:24.1.1+
    cordova.system.library.3=com.soundcloud.android:android-crop:1.0.0@aar
    cordova.system.library.4=com.google.firebase:firebase-core:16.0.8
    cordova.system.library.4=com.google.firebase:firebase-iid:17.1.1
    cordova.system.library.5=com.google.firebase:firebase-messaging:17.5.0
    cordova.gradle.include.2=cordova-plugin-fcm-with-dependecy-updated/raihan-FCMPlugin.gradle
    cordova.gradle.include.3=cordova-support-google-services/raihan-build.gradle
    cordova.system.library.6=com.google.firebase:firebase-auth:16.2.0
    cordova.system.library.6=com.google.firebase:firebase-perf:16.2.4
    cordova.system.library.7=com.android.support:support-annotations:27.+
    cordova.system.library.8=com.android.support:appcompat-v7:23+
    cordova.system.library.8=com.google.firebase:firebase-iid:17.1.1
    cordova.system.library.8=com.google.android.gms:play-services-tagmanager:16.0.8
    cordova.system.library.8=com.google.firebase:firebase-config:16.4.0
    cordova.gradle.include.4=cordova-plugin-telerik-imagepicker/raihan-ignorelinterrors.gradle
    cordova.gradle.include.5=cordova-plugin-telerik-imagepicker/raihan-androidtarget.gradle
    cordova.gradle.include.6=cordova-android-support-gradle-release/raihan-cordova-android-support-gradle-release.gradle
    cordova.gradle.include.7=cordova-plugin-firebase/raihan-build.gradle
Run Code Online (Sandbox Code Playgroud)

我已经提供了上述文件,请告知是否需要上传其他文件。

Dev*_*aud 19

The issue I was facing was in the react-native something similar to

Execution failed for task ':app:checkDebugDuplicateClasses'.
Run Code Online (Sandbox Code Playgroud)

1 exception was raised by workers: java.lang.RuntimeException: java.lang.RuntimeException: Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk8-1.6.21.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21) Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules jetified-kotlin-stdlib-1.8.0.jar (org.jetbrains.kotlin:kotlin-stdlib:1.8.0) and jetified-kotlin-stdlib-jdk7-1.6.21.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)

It means that there is a conflict between two different versions of the Kotlin standard library, specifically the "jetified-kotlin-stdlib-1.8.0.jar" and "jetified-kotlin-stdlib-jdk8-1.6.21.jar" versions. The error message specifically states that there is a duplicate class "kotlin.collections.jdk8.CollectionsJDK8Kt" found in both versions.

and the solution was here there were two approaches but i found this one easier go to android/app/build.gradle and update the dependencies

dependencies {
constraints {
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") {
        because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
    }
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") {
        because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 17

  1. 转到 gradle.properties(项目属性)

  2. 添加
    android.enableJetifier=true

  3. 而且大部分时间android.useAndroidX=true都存在。检查您的 gradle.properties(Project Properties),如果它不存在,则添加
    android.useAndroidX=true-> Look Likes This Image

在此处输入图片说明


Top*_*ter 16

只需将以下行添加到您的gradle.properties文件中:

\n
android.useAndroidX=true\nandroid.enableJetifier=true\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n
\n

最后,重建你的项目。

\n
\n

但有时您可能需要手动删除该build文件夹。

\n
\n
\n

细节

\n

您的项目(或其子项目之一或依赖项)不再使用\xc2\xa0 android.support\xc2\xa0libraries,而是使用\xc2\xa0androidx库,如果与\xc2\xa0libraries 混合,则会导致冲突android.support

\n

如果您想androidx在旧项目中使用命名空间库,则需要将编译 SDK 设置为 Android 9.0(API 级别 28)或更高版本但低于“API 级别 31”,并将上述两个 Android Gradle 插件标志设置为true.

\n

android.useAndroidX:当此标志设置为 时true,Android 插件使用适当的 AndroidX 库而不是支持库。false如果未指定,则默认使用该标志。

\n

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

\n


小智 8

我遇到了同样的问题,我的解决方案如下:

  1. 转到 gradle.properties 文件

  2. 添加这两行:

    android.useAndroidX=true
    android.enableJetifier=true
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重建您的项目。

就是这样。

注意:如果您的项目已显示此内容android.useAndroidX=true,则只需添加android.enableJetifier=true并重建您的项目即可。


Top*_*ter 7

您的项目(或其子项目之一)在末尾使用+加号来引用依赖项,例如com.google.firebase:firebase-auth:+,这意味着,尽可能使用任何更高版本,而较新的版本不再使用android.support库,而是使用androidx; 要解决此问题,请执行以下步骤。

脚步:

  1. 确保设置了ANDROID_HOME环境变量,然后打开控制台窗口(如git-bash,因为它保留了整个命令的输出),并cd进入您的android目录(对于Ionic项目,应为platforms/android)。
  2. 首先,通过在下面运行(在git-bash中)列出所有依赖项
    ./gradlew :app:dependencies
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将结果复制到您首选的文本编辑器中,然后搜索androidx
  4. 如果发现有问题,请执行以下步骤,否则就完成了!(并且您无需重复这些步骤)。
  5. 向上滚动直到在任何行的末尾看到->,例如example 16.0.8 -> 19.0.0+ -> 19.0.0,这都意味着该版本是自动解析的(由于+,其版本比您指定的要高)。
  6. 因此,手动设置版本:
    • 在可能的情况下,在您的项目中找到+号并将其替换为特定版本。
    • 或者,强制使用特定版本的依赖项,如下所述。
  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'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 使用 cordova 8 对我有用的另一种方法是通过添加 https://github.com/dpa99c/cordova-plugin-androidx 然后添加 &lt;https://github.com/dpa99c/cordova-plugin-androidx 来启用 AndroidX 支持-adapter&gt; 这是一个用于更新依赖项的垫片 (3认同)
  • 那是对我有用的解决方案,您节省了我的时间。 (2认同)

Fer*_*isi 6

对我来说,只需安装插件“cordova-plugin-androidx”和“cordova-plugin-androidx-adapter”就解决了这个问题:

$ ionic cordova plugin add cordova-plugin-androidx
$ ionic cordova plugin add cordova-plugin-androidx-adapter
Run Code Online (Sandbox Code Playgroud)