¿Por qué no degradar las clases Java en diferentes sabores de Android?

Tengo una aplicación para Android con 2 sabores: -flavor1 -flavor2

Mi árbol de directorios es:

/src/main /src/flavor1 /src/flavor2 

Main tiene el conjunto de fuentes predeterminado. Flavor1 y flavor2 tienen su propio conjunto de fuentes, que gradle obtiene automáticamente. Si agrego un archivo del recurso en un directorio del sabor lo sobrescribe del principal, y trabajo muy bien.

Sin embargo, si agrego una clase java a flavor2 para anular otra de "main", (por ejemplo una actividad que necesita ser diferente en flavor2), no la reemplaza y dice que hay una clase duplicada en mi proyecto. Sólo conseguí esto para trabajar al eliminar la clase del directorio "principal" y añadirlo a todas las carpetas de sabores.

¿Hay una manera que puedo sobreescribir las clases java al igual que los archivos de recursos? ¿Por qué pasó esto?

¿Hay una manera que puedo sobreescribir las clases java al igual que los archivos de recursos?

No. Xavier Ducrohet, del equipo de herramientas de Android, habló de esto brevemente aquí .

Hay maneras de lograr lo que quieres sin embargo, más en eso en un segundo.

¿Por qué pasó esto?

Su código Java tiene que compilar. Asumiendo que usted hace referencia a una clase Foo de otras clases en su conjunto de fuentes main , esa clase Foo tiene que tener la misma API pública independientemente de qué sabor se está compilando. Si pudieras reemplazar por completo el Foo principal con un Foo específico del sabor, esto podría no ser cierto. Por supuesto, esto no es un problema imposible de resolver con las herramientas, pero la solución de herramientas de compilación actual es simplemente no permitir que lo haga.

Por supuesto, con recursos como imágenes, esto es completamente diferente, siempre y cuando exista una versión del recurso, Android puede usarlo muy bien.

Sin embargo, puede crear implementaciones específicas del sabor de una clase para utilizarlas en su conjunto de fuentes main . La forma más fácil es simplemente poner sólo un Foo en cada sabor, y no proporcionar un Foo en su conjunto de fuentes main . Para obtener puntos de bonificación, cree una interfaz para estas implementaciones dentro de su conjunto de fuentes main para garantizar que las implementaciones específicas del sabor se ajusten a la misma interfaz y no causen errores de compilación.

  • ¿Qué es Maven en Android Studio?
  • Obtener valor (String) de ArrayList <ArrayList <String >> (); En Java
  • ¿Cómo recuperar datos de un cursor en android?
  • Convertir Json Array a una matriz Java normal
  • Cambiar la posición del botón "Mi ubicación" de la API de Google Maps
  • ScheduledExecuterService.scheduleAtFixedRate crea varios grupos de hilos - Android
  • Cómo reemplazar una cadena si no está contenida entre '<' y '>'
  • Dibujo personalizado en la lona del mapa de Mapbox
  • ¿Cómo puedo colocar dos botones al lado de una imagen en la parte inferior del botón?
  • RSA cifra con clave pública codificada en base64 en Android
  • Utilizar IExtendedNetworkService para obtener respuesta de USSD en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.