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.

  • Eclipse y Android y classpath: bin y destino
  • Cómo conectar mi dispositivo Android a eclipse
  • ADT 22.3 (android 4.4) - obtener error "Después de la creación de la escena, #init () debe ser llamado"
  • ¿Qué significa "No se encontró actividad de Lanzador?"
  • "Actualización de la biblioteca de Android" la tarea eclipse bloqueó aleatoriamente mi eclipse al iniciar
  • Importar la biblioteca google-play-service mostrando una X roja junto a esta referencia android
  • Generar proyecto eclipse desde el complemento androide gradle
  • ¿Cómo lograr la estructura modular de subcomponentes de aplicaciones en Android?
  • Cómo iniciar un proyecto de Android con código de ejemplo descargado
  • Exportar un proyecto de biblioteca APK y usarlo en otro proyecto de Android
  • Problema de instalación de Android SDK - Peer no autenticado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.