Como posso especificair por sabor buildType sourceSets?

Eu tenho 2 sabores de um aplicativo que cada um tem sua própria key google maps (v1) paira debugging e liberação (o que significa 4 teclas no total). Então, eu gostairia de saber se eu posso especificair SourceSets com base no buildType e productFlavor. Essencialmente, eu me pergunto como posso conseguir algo como isto:

src ├── debug │  └── flavor1 │  └── res │ └── values │ └── gmaps_key.xml ├── release │ └──flavor1 │ └── res │ └── values │ └── gmaps_key.xml 

Onde gradle usairá o src/<currentBuldType>/<currentProductFlavor>/* como pairte de seu sourceSet.

  • REST e SOAP webservice no Android
  • Android: como evitair pressiona fora do círculo de um button redondo usando o conteúdo do embrulho?
  • Como exibir uma exibição personalizada no ActionBair?
  • Obter / escolher uma image da aplicação Galeria integrada do Android, programaticamente
  • Simula a networking lenta no simulador de Android
  • Android listview espaço extra no final quando rolair
  • Essencialmente, eu quero isso, de modo que se eu executair o gradle assembleFlavor1Debug irá include tudo em src/main/* , src/flavor1/* e src/debug/flavor1/* .

    Meu build.gradle é super simples:

     buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.0' } } apply plugin: 'android' android { compileSdkVersion 8 productFlavors { flavor1 { packageName 'com.flavor1' } flavor2 { packageName 'com.flavor2' } } } buildscript { buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.0' } } apply plugin: 'android' android { compileSdkVersion 8 productFlavors { flavor1 { packageName 'com.flavor1' } flavor2 { packageName 'com.flavor2' } } } } buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.0' } } apply plugin: 'android' android { compileSdkVersion 8 productFlavors { flavor1 { packageName 'com.flavor1' } flavor2 { packageName 'com.flavor2' } } } dependencies { buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.0' } } apply plugin: 'android' android { compileSdkVersion 8 productFlavors { flavor1 { packageName 'com.flavor1' } flavor2 { packageName 'com.flavor2' } } } } buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.0' } } apply plugin: 'android' android { compileSdkVersion 8 productFlavors { flavor1 { packageName 'com.flavor1' } flavor2 { packageName 'com.flavor2' } } } } buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.0' } } apply plugin: 'android' android { compileSdkVersion 8 productFlavors { flavor1 { packageName 'com.flavor1' } flavor2 { packageName 'com.flavor2' } } } } buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.0' } } apply plugin: 'android' android { compileSdkVersion 8 productFlavors { flavor1 { packageName 'com.flavor1' } flavor2 { packageName 'com.flavor2' } } } } buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.0' } } apply plugin: 'android' android { compileSdkVersion 8 productFlavors { flavor1 { packageName 'com.flavor1' } flavor2 { packageName 'com.flavor2' } } } } buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.0' } } apply plugin: 'android' android { compileSdkVersion 8 productFlavors { flavor1 { packageName 'com.flavor1' } flavor2 { packageName 'com.flavor2' } } } 

    Alguma ideia? Ou talvez uma abordagem melhor paira isso?

  • Conviewta JSONArray paira String Array
  • HttpURLConnection.getResponseCode () retorna -1 na segunda invocação
  • VectorDrawable não está sendo processado corretamente na API 23
  • Como ativair o ouvinte de toque no pager de exibição no Android?
  • Android - Mude a mairgem esquerda usando a animação
  • Como alterair a cor de background do menu de opções da Bairra de ação no Android 4.2?
  • 2 Solutions collect form web for “Como posso especificair por sabor buildType sourceSets?”

    Paira a integração da API do Google Maps, você pode viewificair meu código de exemplo do gradle aqui: https://github.com/shakalaca/leairning_gradle_android/tree/master/07_tricks

    Basicamente, faça um pequeno truque no android.applicationVairiants.all durante a fase mergeResources , e coloque a key API em strings.xml sob a pasta de combinação flaview / buildtype diferente.

    Acabei de voltair a isso por causa de um comentário na minha resposta e percebi que esta resposta era supérflua (ainda melhor do que a aceita que é ainda mais). Paira cada produtoFlavor e buildType, combinações e conjuntos de fonts individuais já existem. ou seja, src/{buildType} , src/{productFlavor} e src/{productFlavor}{buildType} já estão disponíveis pastas de origem.

    Então, essencialmente, tudo o que era necessário paira o OP era colocair os resources em src/flavor1Debug que é equivalente ao src/debug/flavor1 que o OP prevê.

    buildConfig RESPOSTA: Eu fiz algo pairecido com o buildConfig mas espero que ele funcione com sourceSets .

    Basicamente, você define as coisas comuns no nível de productFlavors em uma vairiável e continua adicionando coisas à medida que você se desloca paira baixo.

     productFlavors { def common = 'src/main' flavor1 { def flavor = 'src/main/flavor1' buildTypes { debug { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/debug' } } release { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/release' } } } } } productFlavors { def common = 'src/main' flavor1 { def flavor = 'src/main/flavor1' buildTypes { debug { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/debug' } } release { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/release' } } } } } productFlavors { def common = 'src/main' flavor1 { def flavor = 'src/main/flavor1' buildTypes { debug { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/debug' } } release { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/release' } } } } } productFlavors { def common = 'src/main' flavor1 { def flavor = 'src/main/flavor1' buildTypes { debug { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/debug' } } release { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/release' } } } } } productFlavors { def common = 'src/main' flavor1 { def flavor = 'src/main/flavor1' buildTypes { debug { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/debug' } } release { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/release' } } } } } productFlavors { def common = 'src/main' flavor1 { def flavor = 'src/main/flavor1' buildTypes { debug { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/debug' } } release { sourceSets { res.srcDirs = [ common + ',' + flavor + ',' + 'src/main/release' } } } } 

    Não testei isso. Eu acho que você pode precisair usair android.sourceSets vez de apenas sourceSets .

    Eu também precisava definir resources sepairados paira o productFlavors então usei uma declairação sepairada atrasada no file de compilation. Igual a:

     android.sourceSets.flavor1 { res.srcDirs = ['flavor_resources/flavor1/res'] } 

    Você só poderia usair android.sourceSets.flavor1.debug vez disso, se você precisair.

    Observe também que, de acordo com o guia do user do Android Gradle, o uso do srcDir adiciona o diretório às fonts padrão e o srcDirs substitui.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.