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.