type tutorial studio que flavors flavor ext debug android gradle

studio - flavors android tutorial



¿Cómo puedo especificar por sabor buildType sourceSets? (2)

Para la integración de la API de Google Maps, puede consultar el código de muestra de mi gradle aquí: https://github.com/shakalaca/learning_gradle_android/tree/master/07_tricks

Básicamente haga un pequeño truco en android.applicationVariants.all durante la fase mergeResources , y coloque la clave API en strings.xml en una carpeta de combinación flaver / buildtype diferente.

Tengo 2 versiones de una aplicación que tienen cada una su propia clave de google maps (v1) para depurar y liberar (lo que significa 4 claves en total). Entonces me gustaría saber si puedo especificar los sets de origen basados ​​en buildType y productFlavor. Esencialmente, me pregunto cómo puedo lograr algo como esto:

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

Donde gradle usará src/<currentBuldType>/<currentProductFlavor>/* como parte de su sourceSet.

Esencialmente lo quiero así que si ejecuto gradle assembleFlavor1Debug , incluirá todo en src/main/* , src/flavor1/* y src/debug/flavor1/* .

Mi build.gradle es súper simple:

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'' } } }

¿Alguna idea? ¿O tal vez un mejor enfoque para esto?


Sucedí que volví a esto por un comentario sobre mi respuesta y me di cuenta de que esta respuesta es superflua (aún mejor que la aceptada, que es aún más). Para cada productoFlavor y buildType, la combinación y los conjuntos fuente individuales ya existen. es decir, src/{buildType} , src/{productFlavor} y src/{productFlavor}{buildType} ya están disponibles en las carpetas de origen.

Así que esencialmente, todo lo que se necesitaba para el OP era poner los recursos en src/flavor1Debug que es equivalente a src/debug/flavor1 que el OP visualiza.

ANTERIOR RESPUESTA: He hecho algo similar con buildConfig pero espero que funcione con los conjuntos de sourceSets .

Básicamente, usted define las cosas comunes en el nivel productFlavors en una variable y sigue agregando cosas a medida que avanza.

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'' } } } }

No he probado esto. Creo que es posible que necesite usar android.sourceSets lugar de simplemente sourceSets .

También necesité definir recursos separados para los productFlavors así que utilicé una declaración separada al final del archivo de compilación. Al igual que:

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

Debería poder usar android.sourceSets.flavor1.debug en su lugar si lo necesita.

También tenga en cuenta que, de acuerdo con la guía de usuario de Android Gradle, el uso de srcDir agrega el directorio a las fuentes predeterminadas y srcDirs reemplaza.