Próbuję zbudować aplikację w Android Studio. Po dodaniu biblioteki Eclipse Paho jako zależności gradle (czy może to Maven? Jestem nowy w ekosystemie Androida), otrzymałem następujący błąd:
Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat
Message{kind=ERROR, text=Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat, sources=[Unknown source file], tool name=Optional.of(D8)}
Sprawdziłem wiele różnych pytań StackOverflow związanych z tym błędem, ale wszystkie odpowiedzi są specyficzne dla niektórych bibliotek. Szukam nie tylko rozwiązania błędu, ale zrozumienia, co oznacza błąd . W ten sposób ludziom łatwiej będzie znaleźć rozwiązania dla ich konkretnych przypadków. Jak dotąd żadna odpowiedź tego nie zapewniła.
Z innych odpowiedzi StackOverflow wywnioskowałem, że ma to coś wspólnego z moim plikiem gradle. Oto app / build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "---REDACTED FOR PRIVACY---"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.android.support:support-media-compat:27.1.0'
implementation 'com.android.support:support-v13:27.1.0'
implementation 'com.google.android.gms:play-services-maps:12.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.0.2'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.0.2'
}
repositories {
maven { url 'https://repo.eclipse.org/content/repositories/paho-releases/' }
}
źródło
U mnie samo wyczyszczenie projektu rozwiązało problem
Korzystanie z terminala :
Korzystanie z Android Studio :
źródło
Build > Clean Project
.File > Invalidate Caches / Restart > Invalidate and restart
może również rozwiązać problemOd oficjalnego Doc
Jeśli klasa pojawia się więcej niż raz w ścieżce klas środowiska wykonawczego, pojawia się błąd podobny do następującego:
Program type already present com.example.MyClass
Ten błąd zwykle występuje z powodu jednej z następujących okoliczności:
Zależność binarna obejmuje bibliotekę, którą aplikacja zawiera również jako bezpośrednią zależność.
Na przykład aplikacja deklaruje bezpośrednią zależność od biblioteki A i biblioteki B, ale biblioteka A zawiera już bibliotekę B w swoim pliku binarnym. Aby rozwiązać ten problem, usuń bibliotekę B jako bezpośrednią zależność.
Twoja aplikacja ma lokalną zależność binarną i zdalną zależność binarną w tej samej bibliotece.
Aby rozwiązać ten problem, usuń jedną z zależności binarnych. (Zobacz, czy ta sama biblioteka jest dodana jako zależność jar i gradle)
źródło
Przydarzyło mi się to również, ale w moim przypadku próbuję uwzględnić różne zależności, które mają tę samą klasę, używając
debugApi
&,Api
więc Android Studio jest oznaczone jako zduplikowana klasa, więc rozwiązałem problem, używającdebugApi
&,releaseApi
aby uwzględnić różne zależności w zależności od wariantu kompilacji.źródło
Dodaj bibliotekę obsługi do pliku Gradle na poziomie aplikacji
źródło
W moim przypadku oznacza to, że mam 2 pliki * .jar lub 2 biblioteki gdzieś w kodzie źródłowym. Na przykład: mam 2
youtube.jar
wapp/libary
imodule/libary
Usuń zbędne raz i będzie dobrzeźródło
Problem związany z tym problemem - jeśli używasz biblioteki jako modułu i tej samej biblioteki jako zależności w innej bibliotece.
Przykład: Biblioteka A zaimportowana jako moduł i ta sama biblioteka A dodana jako zależność w dowolnym innym module biblioteki.
Jak rozwiązać ten problem?
Rozwiązanie 1 -> jeśli chcesz zachować oba -> Po prostu zmodyfikuj nazwę pakietu LibraryA modułu
Rozwiązanie 2 -> usuń zależność LibraryA i użyj modułu
źródło
Mam nadzieję, że to komuś pomoże, projekt Build> Clean działał dla mnie.
źródło