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 LogCat no funciona para el emulador
- Integración de Unity y Eclipse
- Error al actualizar ADT 23.0.0 en eclipse
- ¿Cómo conoce Eclipse el nombre de su proyecto?
- No es posible instalar dígitos del complemento Fabric en la aplicación android
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?
- Opciones de depuración no disponibles en Eclipse después de reinstalar ADT
- Importar código fuente de Android en eclipse
- Problemas al importar un proyecto de Android en Eclipse
- JavaDoc en un proyecto Eclipse Android
- Eclipse Android Activity Wizard no crea nuevas actividades
- Adición de bibliotecas de soporte técnico al proyecto de Android
- Cómo importar el proyecto de estudio de android en eclipse que utilizan la biblioteca?
- Android: onListItemClick en la actividad
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.