2015-05-21 17 views
5

numaralı senaryodaki projeyi içerir. Senaryo: Müşteri gereksinimlerine ve lisanslamaya bağlı olarak dahil edebileceğimiz/hariç tuttuğumuz birkaç farklı isteğe bağlı bileşen içeren bir Android uygulamasına sahibiz. yapı parametrelerine dayanan ve yapı aroması oluşturma gibi tüm permütasyonları oluşturmayan belirli projeleri dahil etmek mümkün mü? Koşulsal olarak, proje kapsamında yer alan

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

ben bağımlılıkları böyle bir şey yapabileceğini düşündüm:

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

Ama bu işe görünmüyor.

Güncelleme: Geçiş yapabilme özelliklerinin sayısı göz önüne alındığında, her bir permütasyon için açık yapı varyantlarının kullanılması zahmetlidir. Örneğin

, verilen 3 durumlu-muktedir özellikler, böyle tatlar oluşturmak zorunda kalmak istemiyoruz:

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

cevap

5

benim senaryo için çözüm bağımlılıkları dışarı if ifadeyi taşımak oldu:

: Sonra

def featureA_Proj=':featureA_NotIncluded' 

böyle bir görev var

Son olarak, bağımlılıklar altında, sadece şunlardır:

dependencies{ 
    include(featureA_Proj) 
} 
+0

-PincludeFeatureA verilmezse ne olur? – digitizedx

+0

Sonra "if" bloğundaki kod atlandı – Ken

2

Build Variants'u kullanın. Bağımlılıkları projelere dayalı olarak etkinleştirebilir veya devre dışı bırakabilirsiniz Ayrı öğeleri veya kaynak kodunu bunlarla da kullanabilirsiniz. Ben bu şunlardır proje build.gradle başında

gradlew assembleRelease -PincludeFeatureA 

: Komut satırını varsayarsak

:

+0

Ben kaçınmaya çalışıyorum ne sorumu güncellendi. Yapı varyantlarına aşinayım, ancak geçiş yapabileceğiniz birkaç özellikten daha fazlasına sahipseniz, hantallaşıyorlar. Belki de, yapım zamanında değişkenleri oluşturmanın bir yolu vardır. – Ken

İlgili konular