Я пытаюсь создать приложение в Android Studio. После добавления библиотеки Eclipse Paho в качестве зависимости gradle (или это Maven? Я новичок в экосистеме Android) я получил следующую ошибку:
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)}
Я проверил много разных вопросов StackOverflow, связанных с этой ошибкой, но все ответы относятся к определенным библиотекам. Ищу не только решение ошибки, но и понимание, что за ошибка средства. Таким образом людям будет легче найти решения для их конкретных случаев. Пока ответа нет.
Из других ответов StackOverflow я понял, что это как-то связано с моим файлом gradle. Итак, вот 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/' }
}
Эта проблема обычно возникает из-за конфликта имен, в вашем случае библиотеки support-v4, которая используется несколькими библиотеками.
Чтобы найти список зависимостей для модуля app (имя модуля по умолчанию для приложения), мы можем сделать gradlew app:dependencies, чтобы получить список всех библиотек.
Мы обнаружили, что support-v4 используется:
//short version of the dependencies list highlighting support-v4
+--- com.android.support:support-v13:27.1.0
| \--- com.android.support:support-v4:27.1.0
+--- com.google.android.gms:play-services-maps:12.0.1
| +--- com.google.android.gms:play-services-base:12.0.1
| | +--- com.google.android.gms:play-services-basement:12.0.1
| | | +--- com.android.support:support-v4:26.1.0 -> 27.1.0 (*)
+--- org.eclipse.paho:org.eclipse.paho.android.service:1.0.2
| +--- com.google.android:support-v4:r7 // <- problem here
Мы видим, что support-v4 на Картах будет использовать версию, предоставленную в support-v13.
Мы также видим, что библиотека eclipse использует другую версию (r7 ??).
Чтобы решить вашу проблему, вы можете попробовать исключить модуль support-v4 из этой библиотеки eclipse следующим образом:
implementation ('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') {
exclude module: 'support-v4'
}
Тогда вы сможете скомпилировать свое приложение.
Кстати, вы должны позаботиться о том, чтобы модуль eclipse не сломался при тестировании вашего кода.
@Vucko Как вы определили столкновение?
Благодаря чистой удаче. Я начал исследовать и заметил, что моя библиотека видеоплееров Brightcove использует exoplayer как зависимость. Попытайтесь увидеть, что это может быть для вас.
Добавить библиотеку поддержки в файл Gradle уровня приложения
implementation 'com.android.support:design:27.1.0'
Если класс появляется более одного раза в пути к классам среды выполнения, вы получите ошибку, подобную следующей:
Program type already present com.example.MyClass
Эта ошибка обычно возникает из-за одного из следующих обстоятельств:
Бинарная зависимость включает библиотеку, которую ваше приложение также включает в качестве прямой зависимости.
Например, ваше приложение объявляет прямую зависимость от библиотеки A и библиотеки B, но библиотека A уже включает библиотеку B в свой двоичный файл. Чтобы решить эту проблему, удалите библиотеку B как прямую зависимость.
Ваше приложение имеет локальную двоичную зависимость и удаленную двоичную зависимость от одной и той же библиотеки.
Чтобы решить эту проблему, удалите одну из двоичных зависимостей. (Посмотрите, добавлена ли такая же библиотека как зависимость jar и gradle)
Большое спасибо. 1-й был для меня причиной проблемы. Я использовал compileOnly для повторяющейся библиотеки, которая находится внутри другой библиотеки, которую сборка исключает при сборке.
Для меня просто уборка проект решил проблему
Используя Терминал:
./gradlew clean
Используя Android Studio:
Build (menu) > Clean Project
Правильно! Может это баг студии android.
В Android Studio это можно сделать также из меню Build > Clean Project.
Для Android Studio File > Invalidate Caches / Restart > Invalidate and restart также может решить проблему.
Этот ответ не объясняет, что означает ошибка, о чем и задается вопрос.
Я написал ответ много месяцев спустя, просто чтобы поделиться своим опытом с будущими читателями ... они могут искать длинные решения и объяснения, в то время как это может быть решено одним простым шагом .. @ user2102929
Это случилось и со мной, но в моем случае я пытаюсь включить разные зависимости, которые имеют один и тот же класс, используя debugApi и Api, поэтому Android Studio помечена как повторяющийся класс, поэтому я решил проблему, используя debugApi и releaseApi, чтобы включить различные зависимости на основе сборки вариант.
В моем случае это означает, что у меня есть 2 файла * .jar или 2 библиотеки где-то в исходном коде.
Например: у меня 2 youtube.jar в app/libary и module/libary
Удалите лишнее один раз, и все будет хорошо
Надеюсь, это кому-то поможет, У меня работал Build> Clean Project.
Это решение уже предлагалось в комментариях к другому ответу
Проблема для этой проблемы - если вы используете библиотеку как модуль и ту же библиотеку как зависимость в другой библиотеке.
Пример: БиблиотекаA, импортированный как модуль, и тот же БиблиотекаA, добавленный как зависимость в любом другом библиотечном модуле.
Как исправить эту проблему?
Решение 1 -> если вы хотите сохранить оба -> Просто измените имя пакета модуля БиблиотекаA
Решение 2 -> удалите зависимость БиблиотекаA и используйте модуль
implementation project(':LibraryA')
У меня такая же проблема, но с внутренней библиотекой моего проекта после обновления с Android Studio 4.0.2 до 4.1. Я много чего искал и пробовал безуспешно. Если у вас такой же случай, как и у меня, я надеюсь, что этот ответ может помочь. Что я наделал:
Clean Project, затем Rebuild Project - не удалосьInvalidate Caches / Restart - не удалось/User/username/.gradle/caches для macOS) - не удалось./gradlew app:dependenciesили же через окно инструмента Gradle: project->Tasks->android->androidDependencies - ничего подозрительного.gradle и .idea из моего корневого проекта - успех (хотя я не уверен, нужно ли мне удалить оба. Может быть, просто удалите один из них, тоже работает)
У меня было совершенно другое столкновение, но ваш ответ помог мне ПОЛУЧИТЬ идею, что что-то может конфликтовать. Я использовал 2 разных плеера, которые используют Android Exo Player. Может когда-нибудь помочь кому-нибудь. Спасибо!