2013-06-03 23 views
11

Cấu trúc này có được phép không?Thư viện Android có thể ở Gradle có các thư viện Android khác là phụ thuộc không?

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

Tôi đã làm việc này với Ant nhưng với Gradle dự án của tôi không thể tìm thấy sublib1 hoặc sublib2.

Khi tôi chạy gradle tôi nhận được lỗi này:

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

Đây là settings.gradle từ MyProject:

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

Đây là build.gradle từ 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') 
    } 
} 

Đây là settings.gradle từ lib1:

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

Đây là build.gradle từ 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

pháp này có bao giờ làm việc cho bạn? –

+0

No. Tôi đã từ bỏ và trở lại nhật thực. – theJosh

Trả lời

3

Gradle dường như không hỗ trợ một số tệp settings.gradle. Tập tin này nên có mặt chỉ trong thư mục gốc của dự án và nên bao gồm tất cả các tiểu dự án:

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

Nguồn: http://www.gradle.org/docs/current/userguide/multi_project_builds.html

+0

Điều này có nghĩa là các dự án Thư viện của tôi không thể có các dự án Thư viện khác làm phụ thuộc không? – theJosh

+1

Chắc chắn họ có thể, bạn phải đưa họ vào trong cài đặt. Ít nhất điều này là đúng từ quan điểm Gradle thuần túy. Nhóm Android có thể thêm một nhiệm vụ gradle cụ thể hơn cho đệ quy dự án thư viện như vậy, nhưng tôi đã không thấy bất cứ điều gì như thế cho đến nay. – lukas

0

Bạn có thể có các thư viện khác như phụ thuộc vào một dự án thư viện. Trong cài đặt của bạn, chỉ cần bao gồm TẤT CẢ các mô-đun ứng dụng/thư viện.

Và trong dự án thư viện phụ thuộc vào mô-đun thư viện khác, bạn chỉ cần thêm nó làm phụ thuộc giống như bất kỳ mô-đun nào khác trong dự án.

Trong một trong những module thư viện của tôi phụ thuộc vào gradle trông như thế này:

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