166 votos

Utilizando Construir Sabores - la Estructuración de las carpetas de origen y de construir.gradle correctamente

Por favor nota: Respuesta editado después de la Respuesta de Xavier

Estoy tratando de utilizar diferentes a Construir Sabores para una misma Aplicación del proyecto en Android Studio. Sin embargo, me parece que estoy teniendo un momento terrible de la configuración que funcione adecuadamente.

Pasos:

  1. Crear un nuevo Android Studio Proyecto, denominado 'Test'.
  2. Abierto construir.gradle* y agrega las siguientes líneas:

    productFlavors {
    flavor1 {
        packageName 'com.android.studio.test.flavor1'
        }
    flavor2 {
        packageName 'com.android.studio.test.flavor2'
        }
    }
    
  3. Después de reiniciar Android Studio, ahora veo 4 construir variantes en virtud de la construcción de las Variantes de la sección. Lo que significa que fueron exitosos en configurar el producto de sabores tan lejos. **
  4. Crea una nueva carpeta de Origen para flavor1; sin embargo, no estoy seguro de si estoy haciendo de la manera correcta. He aquí cómo lo hice:

    • Tenga en cuenta que mi nombre de Paquete para este proyecto es: com.foo.test
    • Haga clic derecho en la src carpeta, para flavor1, de hecho, me crea las carpetas en el explorador, de manera que la estructura es src/flavor1/java/com/foo/test/MainActivity.java.
    • La anterior funcionaba bien, ya que el "java" de la carpeta está en azul, es decir, la IDE se conoce su activo directorio de origen. Además, el paquete fue creado automáticamente. A pesar de esto, me estoy haciendo una advertencia para duplicar la clase se encuentra. Vea la captura de pantalla aquí.
    • Para flavor2, he intentado crear el paquete de forma manual, pero " src " de la carpeta para flavor2 no parece ser de color azul, y por lo tanto las opciones son diferentes cuando clic con el botón derecho, y 'Nuevos' del Paquete no está disponible para el uso. Ver imagen aquí.
    • Tenga en cuenta que para flavor1, también he creado un 'res' en el directorio, que hace girar a la azul, pero a pesar de eso, no ofrecemos la posibilidad de crear un Androide archivo de Recursos, o Andorid directorio de recursos, en el caso de que yo quería usar diferentes resoruces de diferentes sabores.

Estoy haciendo algo mal? O me estoy perdiendo algo? Déjeme saber si usted necesita más información.

*Mi Proyecto parece haber dos generar.gradle archivos. Uno situado en la raíz de la carpeta del proyecto (\GradleTest), éste está vacío. La segunda se encuentra en la raíz de una subcarpeta de \GradleTest, también con la etiqueta 'GradleTest' (GradleTest-GradleTest), este es el que ya tenía el código cuando se abrió; por lo tanto, que es la que he editado.

** He comprobado gradle la configuración y, al parecer, el Uso de automóviles de importación se han habilitado. A pesar de esto, la realización de cambios a la generación.gradle archivo no actualizar automáticamente la generación de variantes. Nota: también he intentado usar Construir - Reconstruir Proyecto, y/o la Acumulación de Hacer el Proyecto, no-go. Yo todavía tiene que cerrar el proyecto y volver a abrir para que los cambios surtan efecto.

220voto

Xavier Ducrohet Puntos 10342

Si usted obtuvo en el Estudio de las preferencias, en virtud de la Gradle sección, puede habilitar la opción de importación automática para su proyecto (vamos a activar esta opción por defecto más adelante). Esto permitirá el Estudio de re-importar su construcción.gradle cada vez que se modifica.

La creación de sabores no significa que usted va a utilizar el código personalizado para ellos, por lo que no se cree las carpetas. Usted no necesita crear usted mismo.

Si usted mira mi IO hable usted verá cómo podemos mezclar juntos los valores de los sabores y tipo de generación para crear la variante.

Para la fuente de Java:

src/main/java
src/flavor1/java
src/debug/java

son todos 3 se utiliza para crear una sola salida. Esto significa que no se puede definir de la misma clase.

Si usted quiere tener una versión diferente de la misma clase en los dos sabor que usted necesita para crear en ambos sabores.

src/flavor1/java/com/foo/A.java
src/flavor2/java/com/foo/A.java

Y a continuación el código en src/main/java se puede hacer

import com.foo.A

dependiendo del sabor seleccionada, el derecho de la versión de com.foo.Una se utiliza.

Esto también significa que tanto la versión de Un debe tener la misma API (al menos cuando se trata de la API utilizada por las clases en el directorio src/main/java/...

Editar para que coincida revisado pregunta

Además, es importante poner a la misma de Una clase sólo en las carpetas de origen que son mutuamente excluyentes. En este caso src/flavor1/java y src/flavor2/java nunca seleccionado juntos, pero principal y flavor1.

Si desea proporcionar una versión diferente de una actividad en sabor diferente no lo ponga en src/main/java.

Tenga en cuenta que si usted tenía 3 sabores y sólo quería uno personalizado para flavor1, mientras que flavor2 y flavor3 compartido la misma actividad podría crear una fuente común de carpetas para los otros dos actividades. Usted tiene total flexibilidad en la creación de nuevas carpetas de origen y de la configuración de la fuente de uso.

En otras de sus puntos:

Es normal que la 2ª sabor de la carpeta de origen no es azul. Usted necesita para pasar a la 2ª sabor a habilitar y, a continuación, usted será capaz de crear paquetes y clases en el interior. Hasta entonces, el Estudio no considera que sea una carpeta de origen. Esperemos que a mejorar esta situación en el futuro para hacer que el IDE consciente de los unactive carpetas de origen.

Creo que también es normal que no se pueden crear archivos de recursos en la carpeta res. El sistema de menú que no se han actualizado para lidiar con todas estas adicional de recursos de carpetas. Esto vendrá más tarde.

7voto

ben75 Puntos 11322

Parece que usted necesita para cargar su proyecto después de la adición de nuevos sabores en build.gradle. Después de eso, usted va a ver 4 construir Variantes en la construcción de las Variantes de la vista (se accede a él desde el borde izquierdo de la ventana).

Respecto a los directorios de origen, parece que usted necesita para crear a mano : src/flavor1/java y src/flavor2/java. Usted verá que cambiar el sabor en la "construcción de Variantes de" cambiará la actualidad de la fuente activa directorios (directorio es de color azul cuando no es una fuente activa de directorio)

Por último, "gradle creará nuevas sourceSets para sus nuevos sabores" significa que gradle creará los objetos android.sourceSets.flavor1 y android.sourceSets.flavor2 y se puede utilizar en su construcción.gradle secuencia de comandos. Pero esos objetos son creados dinámicamente, es por eso que no los vea en la build.gradle (sugiero la lectura de este : http://www.gradle.org/docs/current/userguide/tutorial_using_tasks.html Especialmente el 6.6: explicar la creación de la dinámica de la tarea. Un gradle script es un script groovy, por lo que sugerimos que se familiarice con groovy)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X