2013-06-03 10 views
11

Czy ta struktura jest dozwolona?Czy biblioteki Androida w Gradle mogą mieć inne biblioteki Androida jako zależności?

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

Miałem to działa z Ant, ale z Gradle mój projekt nie może znaleźć sublib1 lub sublib2.

Kiedy biegnę Gradle otrzymuję ten błąd:

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

To jest settings.gradle z myproject:

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

To build.gradle z 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') 
    } 
} 

To settings.gradle z LIB1:

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

To build.gradle z 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

Czy to kiedykolwiek pracować dla Ciebie? –

+0

Nie. Poddałem się i wróciłem do zaćmienia. – theJosh

Odpowiedz

3

Gradle nie wydaje się obsługuje kilka plików settings.gradle. Plik ten powinien być obecny tylko w katalogu głównym projektu i powinna obejmować wszystkie podprojekty:

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

Źródło: http://www.gradle.org/docs/current/userguide/multi_project_builds.html

+0

Czy to oznacza, że ​​moje projekty Biblioteki nie mogą mieć innych projektów Biblioteki jako zależności? – theJosh

+1

Oczywiście, że mogą, musisz je uwzględnić w pliku settings.gradle. Przynajmniej tak jest z czystego punktu widzenia Gradle'a. Zespół Androida może dodać bardziej szczegółowe zadanie gradle dla takiej rekurencyjności projektu bibliotecznego, ale jak dotąd nie widziałem czegoś podobnego. – lukas

0

może masz inne biblioteki jako zależności w projekcie biblioteki. W swoim folderze settings.gradle znajdują się WSZYSTKIE moduły aplikacji/bibliotek.

I w projekcie biblioteki, która zależy od innego modułu biblioteki po prostu dodać go jako zależność jak każdy inny moduł w projekcie.

W jednym z moich modułów bibliotecznych zależność w Gradle wygląda następująco:

dependencies { 
    compile project(':library1') 
    compile project(':library2') 
    compile project(':library3') 
} 
Powiązane problemy