¿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:
- Android - Iniciar el servicio en el arranque
- Cómo recuperar array multidimensional usando json en android
- ¿Castrará Android la tecnología Jazelle de ARM?
- Calcular Duración
- Androide. OnEditorAction nunca llamado
/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?
- HttpURLConnection - "https: //" frente a "http: //"
- Android Studio informa "Código inalcanzable" con comparación de enum
- Expresión regular de Android para obtener enlaces de la fuente de la página web
- Cómo calcular el radio visible en Google Maps en Android
- Android Support Annotations - ¿Cómo utilizar IntDef / StringDef (Typedef Annotations) con la lista de genéricos?
- MediaExtractor.setDataSource lanza IOException "no se pudo instanciar el extractor"
- Android: java.lang.IllegalStateException: Ya conectado
- Java.lang.IllegalStateException Necesita utilizar un tema Theme.AppCompat (o descendente) con esta actividad
¿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.
- ¿Cuál es el código de color de Android Hint?
- No existe el paquete de errores `com.google.android.gms …`