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

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?

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.

  • No se puede ejecutar la aplicación de Android, No se pudo encontrar el problema de .apk en eclipse
  • Cómo depurar un servicio de fondo de Android?
  • Se encontraron 2 versiones de .jar después de instalar el api de facebook en eclipce. en mi nueva aplicación
  • NullPointerException lanzado en Eclipse al intentar abrir la vista de Android XML?
  • Eclipse ADT Plugin: Se ha producido un error al recopilar los elementos que se van a instalar
  • ¿Hay una manera de deshabilitar las advertencias de xml?
  • VMDisconnectedException durante la depuración de la aplicación de Android
  • No se puede encontrar SDK y AVD Manager
  • ¿Cómo salir de una aplicación de Android con código?
  • Operación de carga larga al abrir un diseño xml en la última ADT
  • Cómo excluir archivos R * .class de una compilación proguard
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.