Aynı sorunla uğraşıyorum. İlk başta kaynak kontrolümde iki dal kullandım, ama bu onları bir arada tutan bir baş ağrıyordu. Gradle çok esnek bir yapı sistemidir, ancak varsayılan kurallar her zaman yeterli değildir. Sonunda kod tabanımda bunu nasıl çözdüm. Her iki tatlar için ortak olan her şeyi tutmak
+ src
+ main
| + res
| | + values
| | - strings.xml
| + java
| ...
+ debug
| + free
| | + res
| | + values
| | - strings.xml
| + paid
| + res
| + values
| - strings.xml
+ free
| + res
| | + values
| | - strings.xml
| + java
| ...
+ paid
+ res
| + values
| - strings.xml
+ java
...
ana klasöründe:
I (basitleştirilmiş) esasen aşağıdaki dizin yapısı ile sona erdi. Ücretsiz klasörde ücretsiz sürüm için benzersiz olan her şeyi saklıyorum (ücretli olarak aynı). Lezzet klasöründeki dosyalar ana üzerine yerleştirilir.
Varsayılan yer paylaşımlı kurallar, "src" altındaki klasörleri aynı ada sahip olan "ücretsiz" ve "ücretli" ürün lezzetlerini işleyecektir. Benim için sorun, yapı tiplerinin bindirilmesiyle başlar.
Lezzet klasörleriyle aynı yapıya sahip bir hata ayıklama klasörü oluşturmuş olsaydım, o anda kullanılan aroma klasörünün üzerine yerleştirilirdi. Bu, her iki tat için de aynı hata ayıklama ismine yol açtı, ancak lezzetine bağlı olarak farklı hata ayıklama isimleri istedim. Bazı araştırmalardan sonra derleme dosyamda aşağıdaki değişikliklerle karşılaştım.
...
android {
buildTypes {
debug {
...
}
release {
...
}
}
productFlavors {
free {}
paid {}
}
}
android.applicationVariants.all { variant ->
if (variant.buildType.name == "release") {
...
}
else if (variant.buildType.name == "debug") {
switch (variant.name) {
case "FreeDebug":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/debug/free")
}
break;
case "PaidDebug":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/debug/paid")
}
break;
}
}
}
...
Şimdi yapı varyantı önce aşağıdaki klasörleri kaplayan tarafından inşa edilecek:
PaidRelease -> /src/main + /src/paid
PaidDebug -> /src/main + /src/paid + /src/debug/paid
FreeRelease -> /src/main + /src/free
FreeDebug -> /src/main + /src/free + /src/debug/free
mevcut böylece ana klasörden silinen Ve sadece tek bir simgeyi değiştirmek değil isterseniz bütün kaynak ağacını çoğaltmak edilir? – powder366
src/main/res tüm yapılara uygulanır, böylece derleme varyantları arasında değişiklik gösteren kaynaklar eklemeniz yeterlidir. – ianhanniballake
Ok teşekkürler! Ama bir projeyi Eclipse'den Studio'ya dönüştürdüğümde, örneğin bir src/main/java almadım, sadece normal olarak src aldım. Ve örneğin sourceSets için bir ana olmalı (varsayılan olarak tahmin ediyorum). Bunu nasıl halledeceğinden emin değilim ... – powder366