Несколько файлов 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, и он всегда появляется там, когда я перезапускаю сборкуDebug.

Если я grep для r7 внутри каталога сборки, я вижу его внутри файла:

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

Если я не включаю v13, тогда другие вещи не компилируются.

Но не поддерживает ли v13 библиотеку поддержки v4?

Является ли это несовместимостью между пакетом AAR для игровых сервисов и библиотекой 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'
}

Ответ 1

Запустите 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

Ответ 2

Я решил аналогичную ошибку, добавив следующий фрагмент кода в мой файл build.gradle внутри блока android.

android {
    dexOptions {
        preDexLibraries = false
    }
}

Ответ 3

Также обратите внимание, что вы можете видеть свои зависимости от Android, перейдя к вашему представлению Android Studio Gradle и выбрав целевую "androidDependencies".

Еще один совет: у меня была эта проблема, пока я не удалил v4-поддержку lib из папки libs как в проекте, так и в связанных с ним проектах модуля/библиотеки.

Ответ 4

Так как картина стоит тысячи слов

Чтобы было проще и быстрее справиться с этой задачей с такими новичками, как я. это скриншоты, которые показывают ответ, отправленный @edsappfactory.com, который работал для меня:

Сначала откройте представление Gradle с правой стороны Androidstudio, в элементе приложения перейдите к Tasks затем Android затем щелкните правой кнопкой мыши androidDependencies выберите " Run:

step 1

Во-вторых, вы увидите что-то вроде этого:

Step 2

Основная причина, по которой я написал это, заключалась в том, что было нелегко узнать, где выполнить задание gradle или команды, опубликованные выше. Так что это то, где их можно извинить.

ТАК, чтобы выполнить команду gradle:

Первый:

first

Во-вторых:

second

Легко как есть.

Это оно.

Спасибо.

Ответ 5

Я начал получать эту ошибку при обновлении до ButterKnife 8.5.1. Ни один из других ответов здесь не работал у меня.

Я использовал gradle -q :app:dependencies, чтобы увидеть дерево, а затем просмотрел файлы jar, пока не нашел конфликт. Конфликт заключался в том, что зависимость butterknife от 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's:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'

Ответ 6

В случае, если кто-нибудь узнает, что ответ от CommonsWare не может быть применен к проекту библиотеки андроида, вот фрагмент для исправления

скомпилировать (проект (': yourAndroidLibrary')) {       исключить модуль: 'support-v13'   }

Вы найдете проблемы

Неподдерживаемый Gradle Метод DSL найден: 'exclude()'

если вы используете компилировать проект (': yourAndroidLibrary') {       исключить модуль: 'support-v13'   }

Различия заключаются в браслете "(" и ")" до "проекта.

Ответ 7

У меня была та же проблема, и кажется, что в моем приложении было слишком много методов из-за библиотек: http://developer.android.com/tools/building/multidex.html

Решил это с помощью:

android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

Подробнее здесь Ошибка: не удалось выполнить задачу ': app: dexDebug'. > команда завершилась с ненулевым значением выхода 2

Ответ 8

exclude module: 'support-v4'

Не будет работать для меня с зависимостями проекта, единственный способ заставить его работать с помощью следующего синтаксиса:

configurations {
    dependencies {
        compile(project(':Android-SDK')) {
            compile.exclude module: 'support-v4'
        }
    }
}

Где: Android-SDK - ваше название проекта.

Ответ 9

У меня была такая же ошибка, но это произошло потому, что я недавно изменил использование v4 в v13. Поэтому все, что мне нужно было сделать, - это очистить проект.

Ответ 10

У меня была такая же ошибка в устаревшем проекте. Моя ошибка заключалась в том, что поддержка-библиотека была включена дважды: один раз внутри google-play-services lib, а другой как автономный.

Вот как я его исправил:

BAD 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'
}

GOOD 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'
}

Надеюсь, что это поможет кому-то: -)

Ответ 11

В моем случае проблема была вызвана несоответствием версии:

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

Решение было простым: сделать все версии 25

Ответ 12

A аналогичный проблема с выпуском 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, имеющие одинаковые классы.

И удалите избыточность.
Это сработало для меня.

Ответ 13

В Android Studio перейдите в свой build.gradle(проверьте как файлы проекта, так и модули build.gradle) и найдите дубликаты зависимостей.

Удалить те, которые не нужны вашему проекту.

Ответ 14

Если вы импортировали проект из 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.

Надеюсь, что это поможет.

Ответ 15

Я использую 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')

}

Ответ 16

Удаление всех файлов из кэша Gradle устранило мою проблему.

в Linux:

rm -rf ~/.gradle/caches/*

Ответ 17

Это раздражающая проблема, которая может занять некоторое время, чтобы выяснить корневой регистр. Способ, которым вы должны продолжить, - ответить @CommonsWare.

Недавно я столкнулся с этой проблемой, и мне было трудно ее решить.

Моя проблема заключалась в том, что я включил библиотеку по версии "+" в build.gradle. Последняя версия библиотеки содержит один из более старых dex и bang.

Я вернулся к старой версии библиотеки и решил ее.

Хорошо запускать ваши androidDependencies и посмотреть, что на самом деле происходит. Его также хорошо искать в вашей папке сборки.

Прежде всего Android Studio 2.2 предоставляет встроенные функции для отслеживания этой проблемы.

Счастливые ребята-кодировщики

Ответ 18

Я удалил  compile 'com.android.support:support-v4:18.0.+' в зависимостях, и он работает

Ответ 19

Наконец, я решил модифицировать эти атрибуты в модуле gradle file

  • compileSdkVersion 25
  • targetSdkVersion 25
  • compile 'com.android.support:appcompat-v7: +'
  • compile 'com.android.support:recyclerview-v7: +'

Ответ 20

У меня была такая же проблема при добавлении 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:+"
}

кажется, что несколько записей не являются большой проблемой, несоответствие версии

Ответ 21

Сработало для конфликта compile file('...'), увеличив minSdkVersion до 21 и включив multidex. Не уверен, что это лучшее решение, но единственный способ заставить его работать в моем случае.

Примечание: для compile file('...') кажется, что вы не можете вставить предложение exclude, чтобы опция не была доступна.

Ответ 22

У меня была та же проблема, и мое решение - изменить версию поддержки "27. +" (27.1.0) на "27.0.1".

Ответ 23

У меня была такая же проблема. В моем проекте у меня были следующие зависимости:

  • AppCompat-v7
  • Android-поддержка-v13

По устаревшим причинам appcompat был получен из репозитория Google Maven, тогда как поддержка android была локальной .jar.

Когда я понял это и заменил эту локальную ссылку на ссылку maven, это просто решило мою проблему сборки.

Вот разница моего приложения /build.gradle:

enter image description here

Ответ 24

Я решил все свои проблемы, добавив это в project.properties

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0

Ответ 25

Получил следующую ошибку

Не удалось выполнить задачу ': app: transformDexArchiveWithDexMergerForDebug'.

com.android.build.api.transform.TransformException: com.android.dex.DexException: несколько файлов dex определяют Landroid/support/constraint/ConstraintSet $ 1

Исправлено: перейти в Build → Clean Project

Ответ 26

Я смог решить проблему в своем собственном проекте, просто добавив

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

в конце моего файла Android\app\build.gradle