2015-05-21 17 views
5

Kịch bản: Chúng tôi có một ứng dụng Android với một vài thành phần tùy chọn khác nhau mà chúng tôi muốn có thể bao gồm/loại trừ tùy thuộc vào nhu cầu và cấp phép của khách hàng. Có thể bao gồm các dự án cụ thể dựa trên thông số xây dựng và không tạo tất cả các hoán vị làm hương vị xây dựng?Có điều kiện bao gồm dự án ở chế độ gradle

./gradlew assembleRelease -PincludeFeatureA=true -PincludeFeatureB=false 

Tôi nghĩ tôi có thể làm một cái gì đó như thế này trong phụ thuộc:

dependencies { 
    if(includeFeatureA){ 
    compile project(':featureAEnabled')  
    } else { 
    compile project(':featureADisabled') 
    } 
} 

Nhưng điều đó dường như không làm việc.

Cập nhật: Xem xét số lượng tính năng có thể chuyển đổi, sử dụng các biến thể xây dựng rõ ràng cho mỗi hoán vị là cồng kềnh.

Ví dụ, với 3 tính năng chuyển đổi-thể, tôi không muốn phải xây dựng hương vị như thế này:

Feature1 
Feature1-Feature2 
Feature1-Feature3 
Feature1-Feature2-Feature3 
Feature2 
Feature2-Feature3 
... 

Trả lời

5

Giải pháp cho trường hợp của tôi là để di chuyển các tuyên bố if ra khỏi sự phụ thuộc:

Giả sử các dòng lệnh:

gradlew assembleRelease -PincludeFeatureA 

Vào đầu những build.gradle dự án, tôi này bao gồm:

def featureA_Proj=':featureA_NotIncluded' 

Sau đó, tôi có một công việc như thế này:

task customizeFeatureA(){ 
    if(project.hasProperty('includeFeatureA')){ 
     println 'Including Feature A' 
     featureA_Proj=':featureA' 
    } 
} 

Cuối cùng, dưới sự phụ thuộc, tôi chỉ bao gồm:

dependencies{ 
    include(featureA_Proj) 
} 
+0

Điều gì sẽ xảy ra nếu -PincludeFeatureA không được đưa ra? – digitizedx

+0

Sau đó, mã trong khối "if" bị bỏ qua – Ken

2

Sử dụng Build Variants. Bạn có thể bật hoặc tắt phụ thuộc vào các dự án dựa trên chúng Bạn thậm chí có thể sử dụng các phần tử hoặc mã nguồn riêng biệt với chúng.

+0

Cập nhật câu hỏi của tôi cho những gì tôi đang cố gắng để tránh. Tôi quen thuộc với các biến thể xây dựng, nhưng khi bạn có nhiều hơn một vài tính năng có thể chuyển đổi, chúng trở nên khó sử dụng. Có lẽ, có một cách để tạo ra các biến thể tại thời điểm xây dựng .. – Ken

Các vấn đề liên quan