2013-08-12 36 views
99

Tôi đang chuyển đổi một trong các ứng dụng của mình thành Gradle và muốn sử dụng các tính năng hương vị mới để có được quảng cáo trả phí và miễn phí.Làm cách nào để xác định các phụ thuộc khác nhau cho các hương vị sản phẩm khác nhau

Tôi chỉ muốn phiên bản dựa trên quảng cáo phụ thuộc vào SDK AdMob.

xây dựng tập tin của tôi trông như thế này:

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

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 18 
    buildToolsVersion "18.0.1" 

    defaultConfig { 
     minSdkVersion 10 
     targetSdkVersion 18 
    } 

    productFlavors { 
     Pro { 
      packageName "de.janusz.journeyman.zinsrechner.pro" 
     } 
     Free { 
      dependencies { 

      } 
     } 
    } 
} 

dependencies { 
    compile 'com.android.support:support-v4:18.0.+' 
    compile 'com.actionbarsherlock:actionbarsherlock:[email protected]' 
    compile fileTree(dir: 'libs', include: '*.jar') 
} 

Có cách nào để cấu hình phụ thuộc vào hương vị sản phẩm miễn phí để có thư mục libs riêng của mình đó là sáp nhập với các thư mục libs chính có chứa các thư viện chung của cả hai hương vị?

Nếu điều này có thể, tôi sẽ xác định thư mục này như thế nào?

+0

lần chủ đề này: http://stackoverflow.com/questions/24860659/multi-flavor-app-based-on-multi-flavor-library-in-android-gradle/24910671#24910671 – Ali

Trả lời

131

Để xác định phụ thuộc hương vị cụ thể, bạn có thể sử dụng proCompile thay vì compile trong phần phụ thuộc của bạn. Khi bạn chạy các thuộc tính gradle, bạn sẽ có được một cái nhìn tổng quan về các cấu hình được tạo tự động.

Các đúng tập tin build trông như thế này:

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

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     minSdkVersion 10 
     targetSdkVersion 22 
    } 

    productFlavors { 
     pro { 
      packageName "de.janusz.journeyman.zinsrechner.pro" 
     } 
     free { } 
    } 
} 

dependencies { 
    compile 'com.android.support:support-v4:22.2.0' 
    freeCompile 'com.google.android.gms:play-services-ads:7.5.0' 
} 
+2

tôi đang cố gắng này và nhận được lỗi này, 'Lỗi: (28, 0) Xây dựng lỗi kịch bản, không hỗ trợ Gradle DSL phương pháp tìm thấy: 'glassCompile()'!' (Hương vị tôi đang cố gắng để thêm một phụ thuộc là "thủy tinh" .) – nmr

+13

Ahh, có vẻ như bạn phải di chuyển khối 'phụ thuộc' bên dưới khối' android'. Cách trực quan. – nmr

+8

Lưu ý rằng đóng cửa 'xxxCompile' Gradle được tạo sẽ không hoạt động nếu tên hương vị bắt đầu bằng chữ cái viết hoa. –

5

Edit: tôi khuyên bạn nên sử dụng một trong những kỹ thuật khác!

Một thay thế cho câu trả lời được chấp nhận là:

ext { 
     flavorType = "" 
    } 


    gradle.startParameter.getTaskNames().each { task -> 

     if(task.contains("flavor1")){ 
      flavorType = "flavor1" 
     } else if (task.contains("flavor2")){ 
      flavorType = "flavor2" 
     } else { 
      flavorType = "flavor3" 
     } 

    } 

if(flavorType == 'flavor1' || flavorType == 'flavor2') { 
     compile 'com.android.support:support-v4:18.0.+' 
    } 
+0

mà không cho phép bạn xây dựng nhiều hương vị cùng một lúc, đó là loại máy cắt giao dịch cho hầu hết chúng ta. Hơn nữa nó có thể không hoạt động tốt với android studio quá –

+2

điều này là trong khối phụ thuộc? – user1743524

+1

Khối này có phụ thuộc không? – Karacago

5

Bạn cần phải tự thêm cấu hình cho mỗi hương vị. Ví dụ

configurations { 
    proCompile 
    freeCompile 
} 

dependencies { 
    compile 'com.parse.bolts:bolts-tasks:1.3.0' 

    proCompile 'com.android.support:design:23.1.1' 
    freeCompile 'com.parse:parse-android:1.12.0' 
} 
+0

Làm thế nào để tiếp tục từ đó? Làm thế nào để kích hoạt các cấu hình khác nhau? Điều này có áp dụng cho bản dựng Android không? Có thể thực hiện điều đó với các bản dựng không phải của Android không? – koppor