2013-06-03 1 views
11

Разрешена ли эта структура?Могут ли библиотеки Android в Gradle иметь другие библиотеки Android в качестве зависимостей?

MyProject/ 
| settings.gradle 
+ app/ 
    | build.gradle 
+ libraries/ 
    + lib1/ 
     | settings.gradle 
     | build.gradle 
     + libraries/ 
      + sublib1/ 
      | build.gradle 
      + sublib2/ 
      | build.gradle 
    + lib2/ 
     | build.gradle 

У меня было это с Ant, но с Gradle мой проект не может найти sublib1 или sublib2.

Когда я бегу Gradle я получаю эту ошибку:

* What went wrong: 
A problem occurred evaluating project ':libraries:lib1'. 
> Project with path ':libraries:sublib1' could not be found in project ':libraries:lib1'. 

Это settings.gradle из MyProject:

include ':libraries:lib1' 
include ':libraries:lib2' 

Это build.gradle из MyProject:

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

dependencies { 
    compile fileTree(dir: 'libs', include: '*.jar') 
    compile project(':libraries:lib1') 
    compile project(':libraries:lib2') 
} 

android { 
    compileSdkVersion 15 
    buildToolsVersion "17.0.0" 

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

     instrumentTest.setRoot('tests') 
    } 
} 

Это settings.gradle из lib1:

include ':libraries:sublib1' 
include ':libraries:sublib2' 

Это build.gradle из lib1:

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     compile fileTree(dir: 'libs', include: '*.jar') 
     compile project(':libraries:sublib1') 
     compile project(':libraries:sublib2') 
    } 
} 

apply plugin: 'android-library' 

android { 
    compileSdkVersion 15 
} 
+0

ли это когда-либо работать для вас? –

+0

Нет. Я сдался и вернулся к затмению. – theJosh

ответ

3

Gradle не кажется, поддержка нескольких файлов settings.gradle. Этот файл должен присутствовать только в корневом каталоге проекта и должен включать в себя все подпроекты:

include ':libraries:lib1', ':libraries:lib1:libraries:sublib1', ':libraries:lib1:libraries:sublib2', ':libraries:lib2' 

Источник: http://www.gradle.org/docs/current/userguide/multi_project_builds.html

+0

Означает ли это, что мои проекты библиотеки не могут иметь другие проекты Библиотеки в качестве зависимостей? – theJosh

+1

Конечно, они могут, вы должны включить их в settings.gradle. По крайней мере, это справедливо с точки зрения чистого Gradle. Команда Android может добавить более конкретную задачу градиента для такой рекурсивности проекта библиотеки, но пока ничего подобного я не видел. – lukas

0

Вы можете иметь другие библиотеки в качестве зависимостей в проекте библиотеки. В ваших настройках.gradle включает только ВСЕ модули приложений/библиотек.

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

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

dependencies { 
    compile project(':library1') 
    compile project(':library2') 
    compile project(':library3') 
}