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.
- Utilizar interfaces AIDL entre módulos / subproyectos en Gradle
- Cómo limitar el uso de memoria DEX
- Productores de productos Gradle y estructura antigua del proyecto
- Generación dinámica de sabores de productos
- Estudio de Android, gradle y NDK
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:
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
- Error al migrar el proyecto Libgdx de Eclipse a Android Studio
- ¿Cómo copiar o usar bibliotecas nativas con Android Studio Gradle?
- Com.android.build.transform.api.TransformException
- No se puede ejecutar ndk-build en el estudio de Android desde gradle on osx yosemite
- Instalar manualmente Gradle y usarlo en Android Studio
- Errores de Gradle en Android Studio
- ¿Cómo hacer que la generación de la versión de Grade no funcione con Lint Option StopShip?
- Gradle de Android: ¿qué significan los corchetes alrededor de la versión?
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;
- SpeechRecognizer causa ANR … Necesito ayuda con Android speech API
- Cómo averiguar qué recursos no se utilizan en una aplicación para Android