2014-04-12 13 views
9

Próbuję ustawić buildConfigField w moim bloku productFlavor, a następnie odwołać się do tego pola w innym miejscu w moim pliku kompilacji gradle, aby móc użyć tej wartości podczas konstruowania nazwy dla mojego pliku gradle apk.Jak uzyskać dostęp do buildConfigField gdzie indziej wewnątrz pliku kompilacji gradle

np

productFlavors{ 
    flavor1{    
     buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor1"' 

    } 
    flavor2{    
     buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor2"' 

    } 

Jak mogę uzyskać dostęp APP_FLAVOR_NAME gdzie indziej w moim skrypcie build.gradle?

Staram się również dowiedzieć, jak odwołać się do samej nazwy smaku w buildscript jako kolejnej opcji do skonstruowania nazwy apk. Jak mogę to zrobić?

Odpowiedz

8

Dodawanie buildConfigField pisze wpisu do pliku BuildConfig.java i nie ma być narażona na buildscript poziomie. Jest to sposób dostarczania meta-informacji o konkretnej kompilacji do kodu zainteresowanego aplikacji - a nie do innego kodu buildscript. Jeśli chcesz wyrzucać nazwy na poziomie buildscript, musisz użyć właściwości Gradle.

Bezwzględnie, jeśli chcesz uzyskać dostęp do kolekcji BuildConfigField obiektów w innym miejscu skryptu, możesz z android.productFlavors.flavor1.buildConfigFields.

Edit

Aby uzyskać konkretną nazwę smaku podczas iteracji nad android.applicationVariants.all można iteracyjne nad kolekcji smaków jak tak (uwaga nie trzeba uchwycić odniesienie do pozycji, którą są iteracji nad, ale to pouczające, aby zobaczyć, jakie obiekty są faktycznie dostępu):

task printFlavors << { 
    println "BuildTypes ⨯ Flavors:" 
    android.applicationVariants.all { variant -> 
     println name 
     variant.productFlavors.each { flavor -> 
      println flavor.name 
     } 
    } 
} 

Albo, jak sugeruje kcoppock, to można uprościć do:

task printFlavorName << { 
    android.applicationVariants.all { 
     println flavorName 
    } 
} 
+0

Czy możesz zasugerować, jaki byłby preferowany sposób odniesienia się do nazwy smaku produktu obecnego wariantu, jeśli przeprowadzałeś iterację na Android.applicationVariants.all? – JohnRock

+0

Um Myślę, że to "nazwa". – dcow

+0

Och, widzę, czego teraz chcesz. "nazwa" odnosi się do wariantu. Aby otrzymać nazwę smaku, potrzebujesz czegoś takiego jak powyższa edycja. – dcow

0

Czy chcesz dodać do odpowiedzi dcow.

Po uzyskaniu smaku, aby uzyskać pole BuildConfig:

variant.productFlavors.each { flavor -> 
    flavor.buildConfigFields.each { key, value -> 
     if(key == "APP_FLAVOR_NAME") { 
      println value.type 
      println value.name 
      println value.value 
     }  
    } 
} 

BuildConfigs są zdefiniowane jako ostateczny klasie. Pola są prywatne. Więc tylko do odczytu.

Powiązane problemy