Несколько файлов dex определяют Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat


212

Если я запускаю 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'
}

1
Я перепробовал все решения, и случилось так, что все они не сработали. Затем я создал новый проект с тем же именем и скопировал все файлы из старого проекта. И это прекрасно работает сейчас. Надеюсь, поможет.
Sam003

У меня была эта проблема с компонентом в support-v13. После долгих отладок и пробных ответов на все безрезультатно, я обнаружил, что это было введено, когда я попытался интегрировать kotlin в проект, который был ожидающим проектом Java. Я удалил стандартную библиотеку kotlin и другие библиотеки kotlin, и все было в порядке. Все равно попытался бы решить проблему с kotlin, но сейчас я должен работать. Любая информация тоже поможет, очень люблю kotlin.
Клементиано

Ответы:


304

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

3
Есть ли метод проверки / исключения модулей из зависимостей .jar, недоступный в Maven? gradle dependenciesКажется, не сообщать о зависимостях, добавленных сcompile files('libs/example.jar')
dbro

3
Допустим, у меня есть две libs/*.jarзависимости с общим модулем, ни одна из которых не доступна в качестве артефакта. Любой способ выполнить подобную проверку зависимости / исключение класса?
августа

2
@dbro: Не то, чтобы я знал, но, опять же, я не исследовал этот момент. ИМХО, вне всяких сомнений, один или оба этих файла JAR выглядят неправильно упакованными, так как общий модуль должен быть выделен в свой собственный JAR.
CommonsWare

12
./gradlew -q: projectName: у меня
сработали

15
Быстрый совет для тех, кто исключает модуль из зависимости от модуля: вы должны превратить его compile project(':foo')в compile(project(':foo')) { exclude module: 'support-v4' }. Обратите внимание на круглые скобки.
espinchi

122

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

android {
    dexOptions {
        preDexLibraries = false
    }
}

4
Работал на меня! Есть ли какие-то недостатки в этом?
Барри Галицкий,

@BarrieGalitzky Я не сталкивался ни с какими проблемами
mike.tihonchik

3
Спасибо человек, это отлично сработало, чтобы решить проблему! Во всяком случае, я думаю, что у него есть некоторые побочные эффекты .. Задача assemblyDebug стала в 3 раза медленнее!
Марино

dexOptions не найден
Оливер Диксон

10
После добавления я получил сообщение «Перевод был прерван». Думаю, я должен попробовать метод CommonsWare.
DroidHeaven

36

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

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

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

шаг 1

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

Шаг 2

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

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

Первый:

первый

Во-вторых:

второй

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

Это оно.

Спасибо.


33

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

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


3
Более конкретная инструкция? Не могу найти "androidDependencies". Thx
CopperCash

Перейдите в представление Gradle, затем найдите заголовок «Все задачи», перейдите к названию вашего приложения, затем к «: app», там вы найдете «androidDependencies».
AutoM8R

2
Где находится вид Gradle?
Пол Бустериен

4
@PaulBeusterien Если вы посмотрите в крайнюю правую часть окна, есть боковая вкладка с надписью Gradle. Нажмите на нее, чтобы открыть закрепленный вид. На самом деле, androidDependencies - сложная задача
JCricket,

спасибо человек, я разместил скриншоты, объясняющие ваш ответ, чтобы сделать его проще.
MBH

11

Я начал получать эту ошибку при обновлении до 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:

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

сохранить версию поддержки такой же, это простое решение, и модуль исключения не работает для меня.
Джей

Я решил и со вторым решением! Тот же конфликт, но с Butter Knife версии 8.8.1 Пример: реализация ('com.jakewharton: butterknife: 8.8.1') {исключить модуль: 'support-compat'} annotationProcessor 'com.jakewharton: butterknife-compiler: 8.8.1'
GFPF

9

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

compile (project (': yourAndroidLibrary')) {исключить модуль: 'support-v13'}

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

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

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

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


Спасибо, пропустил двойные скобки!
Марко

8
exclude module: 'support-v4'

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

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

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


8

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

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

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

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


1
Мультидексинг может замедлить запуск вашего приложения, используйте его только в случае необходимости.
Джеймс Гудвин

6

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


1
Была такая же ошибка после обновления intellij, очистка проекта исправила проблему.
Влад Спрейс

5

У меня была такая же ошибка на устаревшем проекте. Я виноват в том, что библиотека поддержки была включена дважды: однажды внутри библиотеки 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'
}

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


3

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

}


3

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

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

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


3

Аналогично 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, имеющие одинаковые классы.

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


2

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

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


2

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

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

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

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

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

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

Счастливые парни кодирования


2

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

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



1

Я удалил компиляцию 'com.android.support:support-v4:18.0.+' в зависимости, и это работает


2
это должен быть комментарий, иначе вы должны объяснить это лучше.
Анирудх Шарма

1

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

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

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


0

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

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. скомпилировать 'com.android.support:appcompat-v7:+'
  4. скомпилируйте 'com.android.support:recyclerview-v7:+'

0

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

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


0

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

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


0

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


0

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

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

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

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

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

введите описание изображения здесь


0

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

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

0

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

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

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

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


Привет, добро пожаловать в стек переполнения. Но, пожалуйста, не повторяйте ответы, кроме того, что уже имеется 24 ответа, ашишдух уже предоставил чистое здание в качестве ответа. Спасибо!
Эллетлар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.