Los identificadores de recursos de Android repentinamente no son definitivos, switch () 'es broken
Tuve un proyecto Java Android por un tiempo. Hoy, he actualizado las herramientas de desarrollo de Android a la última de Google. Y el proyecto se rompió – tengo un montón de "caso de las expresiones deben ser expresiones constantes" mensajes de error de compilación.
Resulta que el archivo R.java se está generando ahora de manera diferente. Anteriormente, tendría un montón de
- Android AVD no muestra nada. Sólo "ANDROID" en el centro de la pantalla
- Representación de mapa de bits de Eclipse en el depurador
- Nexus 7 se desconecta en Windows / Eclipse / ADB
- Java.lang.OutOfMemoryError al intentar cargar un mapa de bits en imageView
- ¿Por qué MainActivity no se puede resolver o no es un campo?
public static final int MyID=0x12340000;
Declaraciones; Ahora, parece (después de una limpieza / reconstrucción) como este:
public static int MyID=0x12340000;
final
se ha ido. Así que todos los conmutadores de ID de recursos que tenía (y yo tenía unos pocos) están equivocados. ¿Qué sucedió, por favor? ¿Se trata sólo de mí? ¿Cuál es la justificación aquí? ¿Está documentado en cualquier lugar? ¿Puedo traer final
espalda final
alguna manera?
- Guardar una imagen con su pulgar y mostrarla en imageView android
- OpenCV de Android: No se encontró identificador de recurso para el atributo 'camera_id' en el paquete
- Renombrar completamente un proyecto en Eclipse
- ¿Cómo puedo firmar un APK de Android que fue construido con PhoneGap Build?
- No se encontró ningún recurso que coincida con el nombre dado 'Theme.AppCompat.Light.DarkActionBar'
- Uso de la biblioteca de soporte de diseño en Eclipse
- ¿Por qué falta el fragment_main.xml en el ADT Bundle 20140702?
- Android dispositivo virtual super lenta - pc demasiado lento?
Esto sucedió ayer, cuando el SDK / ADT 14 fue puesto en libertad:
A partir de ADT 14, las constantes de recursos en proyectos de biblioteca ya no son definitivas. Esto se explica con mayor detalle en http://tools.android.com/tips/non-constant-fields
Hay un quickfix disponible en ADT 14: http://tools.android.com/recent/switchstatementconversion
Para citar la razón:
Cuando se combinan varios proyectos de biblioteca, los valores reales de los campos (que deben ser únicos) podrían colisionar. Antes de ADT 14, todos los campos eran finales, por lo tanto, todas las bibliotecas tenían que tener todos sus recursos y el código Java asociado recompilado junto con el proyecto principal cada vez que se usaban. Esto era malo para el rendimiento, ya que hizo las compilaciones muy lento. También impidió distribuir proyectos de biblioteca que no incluyeran el código fuente, limitando el alcance de uso de los proyectos de biblioteca.
La razón por la que los campos ya no son definitivos es que significa que los jars de la biblioteca pueden ser compilados una vez y reutilizados directamente en otros proyectos. Además de permitir la distribución de la versión binaria de los proyectos de la biblioteca (que viene en r15), esto hace que las compilaciones sean mucho más rápidas.