Ich entwickle eine Nachrichten-App, erhalte jedoch folgende Fehler von der Gradle-Konsole
(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
unter meiner 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'
}
Antworten:
Sie können Ihrer
gradle.properties
Datei folgende Zeilen hinzufügen :Einzelheiten:
Wenn Sie
androidx
-namespaced-Bibliotheken in einem neuen Projekt verwenden möchten, müssen Sie das Kompilierungs-SDK auf Android 9.0 (API-Level 28) oder höher und beide genannten Android Gradle-Plugin-Flags auf setzentrue
.android.useAndroidX
: Wenn dieses Flag auf gesetzt isttrue
, verwendet das Android-Plugin die entsprechende AndroidX-Bibliothek anstelle einer Support-Bibliothek. Das Flag istfalse
standardmäßig, wenn es nicht angegeben ist.android.enableJetifier
: Wenn dieses Flag auf gesetzt isttrue
, migriert das Android-Plugin automatisch vorhandene Bibliotheken von Drittanbietern, um AndroidX-Abhängigkeiten zu verwenden, indem die Binärdateien neu geschrieben werden. Das Flag istfalse
standardmäßig, wenn es nicht angegeben ist.quelle
android.support.*
durchandroidx.*
Abhängigkeiten (aber für mich führte dies nur zu einem Kompilierungsfehler, weilandroid.support
er in den Codes verwendet wurde), falls jemand nach einer Lösung anstelle einer Problemumgehung sucht, überprüfen Sie die Antwort auf Ausführung fehlgeschlagen für Aufgabe ' : app: checkDebugDuplicateClasses ' (obwohl diese Frage Ionic betrifft, sollte die Antwort funktionieren).Durch Hinzufügen dieser Zeilen zur Datei gradle.properties werden Fehler "Klasse duplizieren" behoben:
Dies führte jedoch zu neuen Fehlern in meinem Projekt:
"Paket android.support.annotation existiert nicht"
"Symbolklassenfragment kann nicht gefunden werden"
"Paket android.support.v4.content existiert nicht"
"Programmtyp bereits vorhanden"
etc.
Das Refactoring hat bei mir jedoch funktioniert:
Jetzt funktioniert mein Projekt (Match4app) mit AndroidX und ich konnte es ohne Probleme im PlayStore veröffentlichen.
Kommentar: Mit dieser Aufgabe konnte ich auch alle anderen Bibliotheken aktualisieren, die von AndroidX abhängen (dh com.firebaseui: firebase-ui-auth: 6.0.2, com.google.android.gms: play-services-games: 18.0.1, com.google.android.gms: play-services-auth: 17.0.0, com.google.android.gms: play-services-ads: 18.2.0 usw.).
quelle
Ich stoße auf so etwas und unten basiert auf meiner anderen Antwort :
Ihr Projekt (oder eines seiner Unterprojekte) bezieht sich auf eine Abhängigkeit mit dem Pluszeichen + am Ende.
com.google.firebase:firebase-auth:+
Verwenden Sie also nach Möglichkeit eine höhere Version, und diese neuere Version verwendet keineandroid.support
Bibliotheken mehr und stattdessen mitandroidx
; Führen Sie die folgenden Schritte aus, um dieses Problem zu beheben.Schritte:
ANDROID_HOME
Umgebungsvariable festgelegt ist, und öffnen Sie dann ein Konsolenfenster (wie git-bash, da die gesamte Befehlsausgabe beibehalten wird) undcd
dasandroid
Verzeichnis Ihres Projekts (für ionische Projekte sollte dies der Fall seinplatforms/android
).androidx
.16.0.8 -> 19.0.0
oder+ -> 19.0.0
, was bedeutet, dass die Version automatisch aufgelöst wurde (auf etwas höheres als von Ihnen aufgrund von + angegeben ).clear
die Konsole).Um eine bestimmte Version der Abhängigkeiten zu erzwingen, fügen Sie Ihrer Stammdatei
build.gradle
Folgendes hinzu (was bei mir funktioniert hat), bearbeiten Sie es jedoch unten und fügen Sie Ihre eigenen Regeln hinzu (da diese für Ihren Fall möglicherweise nicht funktionieren):quelle
Von hier genommen . AndroidX ist das Open-Source-Projekt, mit dem das Android-Team Bibliotheken in Jetpack entwickelt, testet, verpackt, versioniert und veröffentlicht.
quelle
Wie @Ahmed sagt, besteht die Lösung darin, AndroidX zu implementieren, es funktioniert für mich. Es ist jedoch kein einfacher Weg und erfordert ein wenig Geduld ... Dies sind die Schritte, die ich getan habe:
Erstens ist es sehr wichtig, dass Sie all diese Änderungen in einem anderen Zweig vornehmen oder eine Sicherungskopie Ihres Projekts erstellen.
Sie benötigen das Android Gradle Plugin Version 3.5.1. Also, in build.gradle set:
dependencies { classpath 'com.android.tools.build:gradle:3.5.1' ...
Wenn es fertig ist, wurden alle relevanten Änderungen vorgenommen, aber möglicherweise können Sie das Projekt nicht korrekt bereitstellen, da Sie Fehler finden. Dies sind die Probleme, die ich gefunden habe und die Lösungen:
Wenn Sie Kotlin verwenden , setzen Sie in build.gradle:
buildscript { ext.kotlin_version = '1.3.10' ...
undcompile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
destination file("$reportsDir/checkstyle/checkstyle.xml")
quelle
Die Antwort von Top-Master funktioniert nur, wenn Sie ein Downgrade auf eine bestimmte Version durchführen können. In meinem Fall habe ich eine React Native-App und eine der von mir verwendeten Bibliotheken wurde auf AndroidX migriert. Die vorherige Version hatte Probleme mit iOS, daher musste ich die neueste Version verwenden. Was ich tun musste war:
node_module
Abhängigkeiten in AndroidX zu konvertieren. Ab React Native 0.60 wird jetify automatisch ausgeführt, sodass Sie diese Bibliothek nicht installieren müssen.quelle