Gradle Android plugin generar archivos R para diferentes sabores de productos?

Estoy intentando fusionar mi aplicación gratuita y mi aplicación de pago. El nuevo sistema de productFlavors de Android parece ser un ajuste perfecto para mi problema.

Tengo el sabor freeApp funcionando muy bien, sin embargo, cuando construyo el sabor paidApp el archivo R que se está generando está en una estructura de paquete que se define en el freeApp.

Aquí hay un fragmento del archivo gradle.build:

productFlavors { freeApp { versionCode 201308020 versionName "2.0.13_free" packageName "com.flyingspheres.android" } paidApp { versionCode 201305110 versionName "2.0.10_paid" packageName "com.flyingspheres.android.inventory" } 

Siempre he creído que la ubicación del archivo R está definida por el nombre del paquete en el manifiesto. Comprobé que el archivo de manifiesto está generando correctamente.

El problema es que el archivo R para ambos sabores se encuentra en la misma ubicación. Gradle exige que un manifiesto viva dentro del árbol de la fuente principal, así que cualquier versión del manifiesto que pongo en el árbol de fuentes principal donde se generará el archivo R.java.

Suponiendo que obtengo los archivos R para generar en la ubicación correcta para cada sabor; ¿Cómo se deben gestionar las declaraciones de importación para el archivo R para que cada sabor haga referencia al archivo R correcto?

Aquí está una captura de pantalla de mi estructura de proyecto:

Introduzca aquí la descripción de la imagen

Cada archivo AndroidManifest.xml es un manifiesto completo y completo – de acuerdo con la documentación del manifiesto en el árbol principal debe sobrescribir por completo la versión del sabor del producto. Aunque, que claramente no está sucediendo, porque la actividad que debe ser lanzado y los proveedores de contenido no están siendo sobrescritos.

Cualquier idea de lo que estoy haciendo mal sería más apreciada. Esto tiene que ser una situación muy común que cualquier persona que sobrescriba el packageName se ejecutaría en. He estado tratando de averiguarlo por alrededor de una semana y parece que no puedo llegar por mi cuenta.

Gracias,

Aaron

En el plugin de gradle 0.7.3 de android, el archivo de R.java generado solo se hace para el nombre del paquete src/main . Contiene todos los recursos para los diferentes sabores, simplemente los pone en un archivo generado de R.java . Escuché esto de una charla de IO .

¿Cuál es el nombre del paquete en src/main/AndroidManifest.xml ? Mi conjetura es que es com.flyingspheres.android

Trate de importar R en sus clases que necesitan acceder a los recursos de forma programática usando el nombre del paquete src/main .

P.ej

 import com.flyingspheres.android.R; 
  • Casos de prueba de Android que fallan después de actualizar a Java 8 y herramientas de compilación versión 25
  • AndroidStudio - No se pudo actualizar Gradle
  • Com.android.builder.testing.ConnectedDevice> hasTests FALLA
  • Travis CI Build falla en la aplicación de Android Versión de major.minor no compatible 52
  • Android: la aplicación se bloquea en dispositivos Pre-Lollipop
  • Fusión del manifiesto de Gradle de Android falló
  • Gradle Método DSL no encontrado: 'apt ()'
  • cómo hacer fuera de árbol android construye con gradle
  • Excepción al dexar archivos: Se ha interrumpido la traducción
  • Clase no encontrada en aar
  • No se puede encontrar el botón "Sincronizar proyecto con archivos Gradle" en IntelliJ IDEA
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.