Как правильно указать проект библиотеки Android, чтобы включить его зависимости

В Android Studio я пытаюсь скомпилировать модуль приложения Android, который использует библиотеку Android.
Библиотека включает файл jar для Bugsense (автоматически включается gradle).

Хотя библиотечный модуль компилируется правильно, модуль приложения дает сбой, потому что он ищет JAR-файл Bugsense, который используется в библиотечном модуле.

У меня есть обходной путь, который позволяет компилировать проект. При включении в проект зависимости от Bugsense все работает.

Мой вопрос: как мне скомпилировать проект без дублирования зависимости Bugsense?

Вот мой файл build.gradle для проекта библиотеки.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
    maven { url 'http://www.bugsense.com/gradle/' }
}

android {
    compileSdkVersion 15
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 15
    }
}

dependencies {
    compile 'com.bugsense.trace:bugsense:3.6'
}

Проект библиотеки называется "util"

Ниже приведен раздел Android в файле build.gradle для приложения.

android {
    compileSdkVersion 15
    buildToolsVersion '19.0.0'

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 15
    }

    dependencies {
        compile project(':util')
    }
}

Когда я компилирую это, я получаю следующую ошибку:

* What went wrong:
A problem occurred configuring project ':br'.
> Failed to notify project evaluation listener.
   > Could not resolve all dependencies for configuration ':br:_DebugCompile'.
      > Could not find com.bugsense.trace:bugsense:3.6.
        Required by:
            dss:br:unspecified > dss:util:unspecified

Я могу заставить компиляцию работать, добавив Bugsense в раздел репозиториев файла build.gradle для приложения. Ниже приведен код, который я добавил в файл build.gradle для проекта приложения.

repositories {
    mavenCentral()
    maven { url 'http://www.bugsense.com/gradle/' }
}

Помните, что приведенный выше код находится в build.gradle для проекта приложения И библиотеки.

Как избежать добавления зависимости Bugsense как в приложения, так и в проекты библиотек?

ОБНОВЛЕНИЯ:

Я использую Gradle 1.8

Я компилирую из командной строки с помощью "gradle clean assembleDebug"

Ниже приведен полный файл build.gradle для проекта приложения:

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

repositories {
    mavenCentral()
    //maven { url 'http://www.bugsense.com/gradle/' }
}

android {
    compileSdkVersion 15
    buildToolsVersion '19.0.0'

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 15
        testPackageName "com.myapp.test"
    }

    dependencies {
        compile project(':common')
        compile project(':util')
    }
}

dependencies {
    instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.3'
    instrumentTestCompile 'com.squareup:fest-android:1.0.+'
    instrumentTestCompile 'com.squareup.spoon:spoon-client:1.0.+'
    instrumentTestCompile 'com.google.guava:guava:15.0'
}

configurations { spoon }
dependencies   { spoon 'com.squareup.spoon:spoon-runner:1.0.5' }

person AndroidGuy    schedule 10.12.2013    source источник
comment
Зависимости должны быть транзитивными с gradle. Я много раз использовал зависимости из библиотечного проекта без проблем. Что-то должно быть не так с вашей настройкой. Я использовал bugsense несколько месяцев назад без проблем. Можете ли вы опубликовать все свои сборки Gradle, а также указать, какую версию Gradle вы используете. Также укажите с помощью команды, которую вы используете для сборки.   -  person Matt Wolfe    schedule 11.12.2013
comment
Matt Wolfe, я уже использовал подобную технику для библиотечных проектов, и она сработала. Однако в этом случае я использовал файлы jar, которые находились в каталоге libs в проекте, а не файлы, полученные Gradle. Можете ли вы описать, как вы использовали Bugsense — в прилагаемой библиотеке или непосредственно в проекте приложения? Спасибо - я ценю, что вы нашли время, чтобы посмотреть на это.   -  person AndroidGuy    schedule 11.12.2013
comment
Это может быть проблема Gradle 1.9. Я читал некоторое время назад, что были некоторые проблемы с его использованием с Android. Не уверен, что эти проблемы были решены. Я все еще на 1.8 для чего это стоит. Я не вижу ничего выше, что выглядит неправильно, поэтому трудно сказать. Я бы попробовал Gradle 1.8.   -  person Matt Wolfe    schedule 11.12.2013
comment
На самом деле я использую Gradle 1.8 (1.9 еще не поддерживается плагином Android Gradle). Я исправил сообщение, чтобы отразить правильную версию.   -  person AndroidGuy    schedule 11.12.2013
comment
Добраться куда-нибудь с этим?   -  person VicVu    schedule 08.09.2014


Ответы (1)


Это ожидаемое поведение. Учитываются только объявления репозитория для проекта, конфигурация которого разрешена в данный момент, даже если задействованы транзитивные зависимости. Как правило, репозитории объявляются внутри блока allprojects { .. } или subprojects { ... } корневого проекта, и в этом случае эта проблема никогда не может возникнуть.

PS: dependencies { .. } должен выйти за пределы блока android { ... }.

person Peter Niederwieser    schedule 11.12.2013
comment
Почему это ожидается? Я ожидаю, что он найдет зависимости зависимости и также загрузит их или объединится с текущими зависимостями. Есть ли причина, по которой мы не можем этого сделать? - person bugraoral; 06.05.2014