Несколько файлов dex определяют Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat
Если я бегу gradle assembleDebug
из командной строки я неожиданно получаю эту ошибку:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
at com.android.dx.command.dexer.Main.run(Main.java:232)
at com.android.dx.command.dexer.Main.main(Main.java:174)
at com.android.dx.command.Main.main(Main.java:91)
Если я grep для v4, я вижу два файла в моей папке сборки.
Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches
Мой файл Gradle включает только эту библиотеку поддержки:
compile 'com.android.support:support-v13:19.0.0'
Я озадачен тем, как библиотека r7 включена как-то. Я бегал gradle clean
и он всегда появляется там, когда я перезапускаю assemblyDebug.
Если я grep для r7 внутри каталога сборки, я вижу его внутри файла:
Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches
Если я не включу v13, то другие вещи не будут компилироваться.
Но не включает ли v13 библиотеку поддержки v4?
Является ли это несовместимостью между пакетом AAR play services и библиотекой v13?
Я взял файл gradle с сайта gradleplease.appspot.com.
Удаление игровых сервисов не исправляет это; та же ошибка.
Мои зависимости внутри build.gradle:
dependencies {
// Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'
// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}
27 ответов
Бежать gradle -q dependencies
(или же gradle -q :projectName:dependencies
) создать отчет о зависимостях. Вы должны увидеть, где r7
исходит из, таких как:
compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
| +--- com.actionbarsherlock:actionbarsherlock:4.4.0
| | \--- com.google.android:support-v4:r7
| +--- com.commonsware.cwac:camera:0.5.4
| \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0
Затем используйте exclude
директива, чтобы заблокировать эту зависимость. В моем случае это происходит из моей библиотеки CWAC-Camera, и поэтому я использую:
dependencies {
compile('com.commonsware.cwac:camera-v9:0.5.4') {
exclude module: 'support-v4'
}
compile 'com.android.support:support-v4:18.0.+'
}
(где второй compile
Заявление указывает, какую версию вы на самом деле хотите)
Это должно прояснить ситуацию, как вы увидите, если вы снова запустите отчет о зависимостях:
compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
| +--- com.actionbarsherlock:actionbarsherlock:4.4.0
| \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0
Я решил похожую ошибку, добавив следующий фрагмент кода в мой файл build.gradle внутри блока Android.
android {
dexOptions {
preDexLibraries = false
}
}
Поскольку картинка стоит тысячи слов
Чтобы было проще и быстрее справиться с этой задачей с новичками, такими как я. это скриншоты, на которых показан ответ @ edsappfactory.com, который работал для меня:
Сначала откройте вид Gradle на правой стороне Androidstudio, в пункте вашего приложения перейдите на Tasks
затем Android
затем щелкните правой кнопкой мыши androidDependencies
тогда выбирай Run
:
Во-вторых, вы увидите что-то вроде этого:
Основная причина, по которой я написал это, было нелегко узнать, где выполнить gradle
Задача или команды, размещенные выше. Так что это то, где их можно извинить.
ТАК, чтобы выполнить команду gradle:
Первый:
Во-вторых:
Легко как есть.
Это оно.
Спасибо.
Также отметим, что вы можете увидеть свои зависимости Android, перейдя в представление Android Studio Gradle и выбрав цель "androidDependencies".
Еще один совет: у меня была эта проблема, пока я не удалил библиотеку поддержки v4 из папки libs как в проекте, так и в моем связанном проекте модуля / библиотеки.
Я начал получать эту ошибку при обновлении до ButterKnife 8.5.1. Ни один из других ответов здесь не работал для меня.
я использовал gradle -q :app:dependencies
чтобы увидеть дерево, а затем просмотрел файлы jar, пока не обнаружил конфликт. Конфликт состоял в том, что зависимость "ножа от масла" com.android.support:support-compat:25.1.0
содержит версию класса доступности, и com.android.support:support-v4:23.1.1
также содержит класс.
Я решил это, изменив мою зависимость от этого:
compile 'com.jakewharton:butterknife:8.5.1'
к этому:
compile('com.jakewharton:butterknife:8.5.1') {
exclude module: 'support-compat'
}
Похоже, это пока не влияет на работу ButterKnife.
Изменить: есть лучшее решение, которое было обновить мои библиотеки поддержки Android, чтобы соответствовать ButterKnife:
compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'
В случае, если кто-то узнает, что ответ от CommonsWare не может быть применен к проекту библиотеки Android, вот исправленный фрагмент
compile (project (': yourAndroidLibrary')) {исключить модуль: 'support-v13' }
Вы найдете проблемы
Обнаружен неподдерживаемый метод Gradle DSL: 'exclude()'
если вы используете проект компиляции (': yourAndroidLibrary') {исключить модуль: 'support-v13' }
Различия заключаются в браслете "(" и ")" перед "проектом".
У меня была та же проблема, и кажется, что в моем приложении было слишком много методов из-за библиотек: http://developer.android.com/tools/building/multidex.html
Решил это с помощью:
android {
defaultConfig {
...
multiDexEnabled = true
}
}
Подробнее здесь Ошибка: не удалось выполнить задачу ': app: dexDebug'. > команда завершилась с ненулевым значением выхода 2
exclude module: 'support-v4'
У меня не получится работать с зависимостью проекта, единственный способ заставить его работать - использовать следующий синтаксис:
configurations {
dependencies {
compile(project(':Android-SDK')) {
compile.exclude module: 'support-v4'
}
}
}
Где:Android-SDK - это название вашего проекта.
У меня была такая же ошибка, но это потому, что я недавно перешел с использования v4 на v13. Так что все, что мне нужно было сделать, это очистить проект.
У меня была такая же ошибка на устаревшем проекте. Я виноват в том, что библиотека поддержки была включена дважды: однажды внутри библиотеки google-play-services, а другая как автономная.
Вот как я это исправил:
ПЛОХАЯ build.gradle:
dependencies {
compile files('libs/android-support-v4.jar')
compile files('libs/core-2.2.jar')
compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
compile 'com.google.android.gms:play-services:3.2.65'
}
ХОРОШИЙ build.gradle:
dependencies {
// compile files('libs/android-support-v4.jar') // not needed
compile files('libs/core-2.2.jar')
compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
compile 'com.google.android.gms:play-services:3.2.65'
}
Надеюсь, это поможет кому-то:-)
Я использую com.google.android.gms:play-services-analytics:8.3.0
а такжеandroid-support-v13.jar
и не мог получить exclude module: 'support-v4'
работать.
То, что работало для меня, использовало android-support-v13
артефакт, а не android-support-v13.jar
файл.
Т.е. вместо
dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile files('libs/android-support-v13.jar')
}
я использовал
dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile ('com.google.android:android-support-v13')
}
Подобный метод решения проблем с dex
gradle.build содержал:
compile files('libs/httpclient-4.2.1.jar')
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
Проблема была решена, когда я удалил
compile files('libs/httpclient-4.2.1.jar')
Мой Gradle теперь выглядит так:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.3"
defaultConfig {
applicationId "com.mmm.ll"
minSdkVersion 16
targetSdkVersion 24
useLibrary 'org.apache.http.legacy'
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.google.android.gms:play-services:6.1.+'
compile files('libs/PayPalAndroidSDK.jar')
compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/gcm.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}
В JAR-файле и скомпилированном проекте gradle была избыточность
Так что внимательно ищите зависимости и файлы JAR, имеющие одинаковые классы.
И удалить избыточность.
Это сработало для меня.
В моем случае проблема была вызвана несоответствием версий:
Build tools 25
compileSdk 24
targetSdk 24
Support library 24
Решение было простым: сделать все версии 25
Если вы импортировали свой проект из Eclipse.
1. The select project
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency**
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project
Сценарий, с которым я столкнулся после импорта проекта Eclipse в Android-студию.
Надеюсь это поможет..
Это раздражающая проблема, которая может занять некоторое время, чтобы выяснить основной случай. Вы должны действовать следующим образом: ответ @CommonsWare.
Я недавно столкнулся с этой проблемой, и мне было трудно ее решить.
Моя проблема заключалась в том, что я включал библиотеку по версии "+" в build.gradle. Последняя версия библиотеки содержала одну из старых версий dex и bang.
Я вернулся к старой версии библиотеки и решил ее.
Это хорошо, чтобы запустить ваши androidDependencies и посмотреть, что на самом деле происходит. Это также хорошо для поиска в вашей папке сборки.
Прежде всего, Android Studio 2.2 предоставляет встроенные функции для отслеживания этой проблемы.
Счастливые парни кодирования
В Android Studio зайдите в свой build.gradle (проверьте файлы проекта и модулей build.gradle) и найдите дублирующиеся зависимости.
Удалить те, которые не нужны вашему проекту.
Удаление всех файлов из кэша Gradle устранило мою проблему.
в Linux:
cd ~/.gradle
rm -R -f *
Я удалил компиляцию 'com.android.support:support-v4:18.0.+' в зависимости, и это работает
Мне удалось решить проблему в моем проекте React Native, просто добавив
configurations {
all*.exclude group: 'com.android.support', module: 'support-compat'
all*.exclude group: 'com.android.support', module: 'support-core-ui'
}
в конце моего файла android\app\build.gradle
Наконец, я решил это, модифицируя эти атрибуты в файле модуля gradle.
- compileSdkVersion 25
- targetSdkVersion 25
- скомпилировать 'com.android.support:appcompat-v7:+'
- скомпилируйте 'com.android.support:recyclerview-v7:+'
Получил это работает для compile file('...')
конфликт из-за увеличения minSdkVersion до 21 и включения multidex. Не уверен, что это лучшее решение, но единственный способ заставить его работать в моем случае.
Примечание: для compile file('...')
кажется, что вы не можете положить в exclude
пункт, так что вариант не был доступен.
У меня была та же проблема, и мое решение - изменить версию поддержки "27.+" (27.1.0) на "27.0.1".
У меня была такая же проблема при добавлении react-native-palette
в моем проекте вот мое дерево зависимостей:
./gradlew app:dependencies
+--- project :react-native-palette
| +--- com.facebook.react:react-native:0.20.+ -> 0.44.2
| | +--- javax.inject:javax.inject:1
| | +--- com.android.support:appcompat-v7:23.0.1
| | | \--- com.android.support:support-v4:23.0.1
| | | \--- com.android.support:support-annotations:23.0.1 -> 24.2.1
...
| \--- com.android.support:palette-v7:24.+ -> 24.2.1
| +--- com.android.support:support-compat:24.2.1
| | \--- com.android.support:support-annotations:24.2.1
| \--- com.android.support:support-core-utils:24.2.1
| \--- com.android.support:support-compat:24.2.1 (*)
+--- com.android.support:appcompat-v7:23.0.1 (*)
\--- com.facebook.react:react-native:+ -> 0.44.2 (*)
Я перепробовал много солутонов и не мог это исправить, пока не поменял com.android.support:appcompat
версия в android/app/build.gradle
Хотелось бы, чтобы это помогло:
dependencies {
compile project(':react-native-palette')
compile project(':react-native-image-picker')
compile project(':react-native-camera')
compile fileTree(dir: "libs", include: ["*.jar"])
// compile "com.android.support:appcompat-v7:23.0.1"
compile "com.android.support:appcompat-v7:24.2.1"
compile "com.facebook.react:react-native:+"
}
кажется, что несколько записей не является большой проблемой, несоответствие версий
У меня была такая же проблема. В моем проекте у меня были следующие зависимости:
- AppCompat-v7
- Android-поддержка-v13
По устаревшим причинам appcompat был получен из репозитория Google Maven, тогда как поддержка android была локальной.jar.
Когда я понял это и заменил эту локальную ссылку на ссылку maven, это просто решило мою проблему сборки.
Вот разница моего приложения /build.gradle:
Получил следующую ошибку
Не удалось выполнить задачу ': app: transformDexArchiveWithDexMergerForDebug'.
com.android.build.api.transform.TransformException: com.android.dex.DexException: несколько файлов dex определяют Landroid/support/constraint/ConstraintSet$ 1
Исправлено: перейти в Build -> Clean Project
Я решил все свои проблемы, добавив это в project.properties
cordova.system.library.7=com.android.support:appcompat-v7:27.1.0
Всем, кто обновил свою студию Android, я рекомендую очистить ваш проект, и все будет в порядке. Очистка проекта сработала для меня.