Конфликт между службами Google Play и зависимостями HoloEverywhere от Android Studio

Я только начал использовать Android Studio и Gradle и столкнулся с ошибкой конфликта, когда пытаюсь запустить свое приложение. Я уже провел некоторые исследования, и проблема в том, что HoloEverywhere использует пользовательскую библиотеку support-v4 (видимость некоторых внутренних классов изменена), которая отличается от библиотеки support-v4, используемой другими библиотеками, в данном случае Google Play Services. Я читал в некоторых сообщениях, таких как здесь использовать одну и ту же библиотеку support-v4 во всех модулях, но в данном случае я не могу этого сделать, потому что без пользовательской библиотеки support-v4 HoloEverywhere не работает, и я не могу коснуться support-v4 библиотека, используемая Сервисами Google Play. Я надеюсь, что кто-то уже испытал это и нашел решение, потому что это сводит меня с ума :)

Вот журнал ошибок:

Execution failed for task ':app:dexDebug'.
    > com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/Users/diego/Documents/android-sdk-macosx/build-tools/19.0.1/dx --dex --output 
/Users/diego/Documents/WorkspaceAndroid/WorkspaceTest/app/build/libs/app-debug.dex 
/Users/diego/Documents/WorkspaceAndroid/WorkspaceTest/app/build/classes/debug 
/Users/diego/Documents/WorkspaceAndroid/WorkspaceTest/app/build/dependency-cache/debug 
/Users/diego/Documents/WorkspaceAndroid/WorkspaceTest/app/build/pre-dexed/debug/classes-2c9d7b640eaa13481d9d1c220b95094b847d6825.jar 
/Users/diego/Documents/WorkspaceAndroid/WorkspaceTest/app/build/pre-dexed/debug/classes-2edf2d8c7b1a7575431e0269a325d54bdc9fc798.jar 
/Users/diego/Documents/WorkspaceAndroid/WorkspaceTest/app/build/pre-dexed/debug/classes-bc16442b2fdfdfc88911109da1e6baf89a7938a0.jar 
/Users/diego/Documents/WorkspaceAndroid/WorkspaceTest/app/build/pre-dexed/debug/nineoldandroids-2.4.0-1e541581bdb9515af0d791ecbc51193b05f1c93a.jar 
/Users/diego/Documents/WorkspaceAndroid/WorkspaceTest/app/build/pre-dexed/debug/support-v4-13.0.0-2f3822466a4631d8fa7d69b3fd104b27f4df0298.jar 
/Users/diego/Documents/WorkspaceAndroid/WorkspaceTest/app/build/pre-dexed/debug/support-v4-19.0.1-a98845f591723a85fad8ed448a9cc0ced3cb3194.jar 
/Users/diego/Documents/WorkspaceAndroid/WorkspaceTest/app/build/pre-dexed/debug/support-v4-19.0.1a-f1f3d357780dd5b4d33c6ca1830109136769ef22.jar
    Error Code:
    2
    Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) 
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
    at com.android.dx.command.dexer.Main.run(Main.java:230)
    at com.android.dx.command.dexer.Main.main(Main.java:199)
    at com.android.dx.command.Main.main(Main.java:103)

settings.gradle:

include ':app'
include 'Volley'
include 'Facebook'
include 'ViewPagerIndicator'
include 'HoloEverywhere'

project(':Volley').projectDir = new File(settingsDir, 'libraries/volley')
project(':Facebook').projectDir = new File(settingsDir, 'libraries/facebook-android-sdk/facebook')
project(':ViewPagerIndicator').projectDir = new File(settingsDir, 'libraries/Android-ViewPagerIndicator/library')
project(':HoloEverywhere').projectDir = new File(settingsDir, 'libraries/HoloEverywhere/library')

build.gradle в каталоге app:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.+'
    }
}

apply plugin: 'android'

repositories {
        mavenCentral()
}

android {
        compileSdkVersion 19
        buildToolsVersion '19.0.1'

        defaultConfig {
                minSdkVersion 10
                targetSdkVersion 19
        }
}

dependencies {
        compile 'com.google.android.gms:play-services:4.0.30'
        compile project(':Volley')
        compile project(':Facebook')
        compile project(':ViewPagerIndicator')
        compile project(':HoloEverywhere')
}

build.gradle в каталоге HoloEverywhere/library:

buildscript {
        repositories {
                mavenCentral()
        }
        dependencies {
                classpath 'com.android.tools.build:gradle:0.7.+'
        }
}

apply plugin: 'android-library'

dependencies {
        compile files ('libs/support-v4-19.0.1.jar')
        compile files ('libs/nineoldandroids-2.4.0.jar')
}

android {
        compileSdkVersion 19
        buildToolsVersion '19.0.1'

        defaultConfig {
                minSdkVersion 7
                targetSdkVersion 19
        }

        sourceSets {
                main {
                    manifest.srcFile 'AndroidManifest.xml'
                    java.srcDirs = ['src']
                    res.srcDirs = ['res']
                }
        }
}



Ответы (2)


Сделайте эти изменения обязательными. Избегайте использования локальных проектов, если репозиторий доступен на maven:

Для залпового использования:

 compile 'com.mcxiaoke.volley:library-aar:1.0.0'

в файле build.gradle вашего модуля приложения и удалите все, что связано с Volley, в settings.gradle.

Согласно библиотеке holoeverywhere здесь

https://github.com/Prototik/HoloEverywhere/blob/master/library/build.gradle

Он использует эту зависимость

 dependencies {
    compile 'com.android.support:support-v4:19.0.+'
   compile 'com.nineoldandroids:library:2.4.0@jar'
 }

Загрузите это и добавьте в свой проект, заменив то, что у вас уже есть.

Если зависимость поддержки находится в одном модуле проекта gradle, как в вашем случае (holoeverywhere или viewpageindicator), не нужно включать ее в какой-либо другой модуль, поэтому удалите ее, если она есть.

После внесения всех этих изменений синхронизируйте свой проект с gradle с помощью этой кнопки.

person pyus13    schedule 15.01.2014
comment
Когда я использую: compile 'com.android.support:support-v4:19.0.1@jar', он не может найти классы библиотеки. Может быть, я делаю что-то не так. - person diegocarloslima; 15.01.2014
comment
я скопировал это из библиотеки github, проверьте мой обновленный ответ и попробуйте. - person pyus13; 15.01.2014
comment
Если я использую «скомпилировать» com.android.support:support-v4:19.0.+, он не найдет некоторые определенные классы из пользовательской версии библиотеки поддержки. А также не находит «com.nineoldandroids:library:2.4.0@jar». - person diegocarloslima; 16.01.2014
comment
Убедитесь, что вы загрузили последний код с github для holoeverywhere, всего месяц назад библиотека поддержки была перемещена в версию 19, и я думаю, что вам нужно использовать эту банку только для того, чтобы ваш код работал, а не тот, который находится в репозитории Google. Как только вы загрузите новый код, вы автоматически найдете зависимость. Пожалуйста, сделайте скриншот вашей структуры кода. - person pyus13; 16.01.2014

После проб и ошибок и благодаря советам @pyus13 и @Prototik я смог запустить свой проект с помощью Android Studio. Я удалил все локальные копии библиотек зависимостей, кроме ViewPagerIndicator. Вот рабочие файлы gradle:

settings.gradle:

include ':app'
include 'ViewPagerIndicator'

project(':ViewPagerIndicator').projectDir = new File(settingsDir, 'libraries/Android-ViewPagerIndicator/library')

build.gradle в каталоге app:

buildscript {
        repositories {
                mavenCentral()
        }
        dependencies {
                classpath 'com.android.tools.build:gradle:0.7.+'
                classpath 'org.holoeverywhere:plugin:0.2.+'
        }
}

apply plugin: 'holoeverywhere'
apply plugin: 'android'

repositories {
        mavenCentral()
}

holoeverywhere {
        addons {
                create 'preferences'
                create 'slider'
        }
        library {
                version '2.1.0'
        }
}

android {
        compileSdkVersion 19
        buildToolsVersion '19.0.1'

        defaultConfig {
                minSdkVersion 10
                targetSdkVersion 19
        }
}

dependencies {
        compile 'com.google.android.gms:play-services:4.0.30'
        compile 'com.google.code.gson:gson:2.2.+'
        compile 'com.mcxiaoke.volley:library-aar:1.0.+@aar'
        compile 'fr.avianey:facebook-android-api:3.6.+@aar'

        compile project(':ViewPagerIndicator')
}
person diegocarloslima    schedule 18.01.2014