2010-06-24 16 views
7

Es bueno tener coherencia en los nombres de los archivos.¿Por qué los nombres de archivo de diseño de Android son tan limitados?

MyActivity.java contiene el MyActivity clase pública

Me gustaría que el archivo XML con su disposición a ser llamado res/layout/MyActivity.xml

Pero me aparece un mensaje de error que dice "Nombre de archivo no válido : debe contener solamente [a-z0-9_.]"

así que dos preguntas: ¿

  1. ¿por qué es el juego de caracteres tan limitada (ni siquiera mayúsculas Vamos !) - Ah - esta restricción probablemente esté en su lugar para que nunca te arruinen los sistemas de archivos que no distinguen entre mayúsculas y minúsculas, como HFS + de Apple (aunque ver Wikipedia para la historia sangrienta http://en.wikipedia.org/wiki/Comparison_of_file_systems#cite_note-note-35-77)

  2. ¿Qué nombres de archivos están restringidos? ¿Todos res? solo res/layout? res/layout más algunas otras carpetas?

¿Alguien puede confirmar 1 y dar detalles sobre 2?

Gracias,

Peter

Respuesta

9

¿Por qué es el juego de caracteres tan limitado

Debido a que el nombre tiene que ser un identificador Java válido, por lo que se pueden usar constantes como R.layout.foo para identificar la distribución en tiempo de ejecución.

¿Qué nombres de archivos hay restringidos - todos de res? solo res/layout? res/layout más algunas otras carpetas?

Cualquier cosa en res/

+1

Pero ... Tengo letras mayúsculas en mi código Java ... –

+1

Esa parte que no puedo explicar, aparte de la teoría del sistema de archivos del sistema operativo. – CommonsWare

+0

Gracias por una explicación plausible, pero me pregunto si hay más. –

2

No estoy seguro de la razón de #1. Nunca he visto una explicación en ninguna lectura sobre Recursos. Para #2 de mi experiencia cualquier cosa que se utilizará como una identificación en java, por ejemplo, R.drawable.marker, R.string.default_message tiene que seguir esas reglas de [a-z0-9_].

0

Cuando se utiliza MacOS X como plataforma de desarrollo, casi cualquier desarrollador tratar con código de plataforma cruzada, tarde o temprano se encontrará con el problema de que el código fuente de un proyecto Linux/UNIX no se puede construir después de la descarga/compra/clonación porque el proyecto tiene dos archivos con nombres idénticos en un único directorio que solo varía en el caso; y en OS X eso significa que terminas con solo un archivo ya que el segundo sobrescribirá el primero.

Por supuesto, HFS + puede distinguir entre mayúsculas y minúsculas, pero esto solo se puede configurar al formatear una partición y de forma predeterminada todas las Mac vienen con OS X preinstalado en una partición preformateada con HFS + insensible a mayúsculas y minúsculas (ya que es el predeterminado modo para HFS +). Por lo tanto, primero tendría que volver a formatear su Mac recién comprada y reinstalar OS X para lograr ese objetivo. Y luego prepárate para problemas ya que muchas aplicaciones dependen de la insensibilidad de mayúsculas y minúsculas en Mac; un ejemplo muy famoso es Steam (no se puede ejecutar Steam desde un HFS + sensible a las mayúsculas y minúsculas).

Y no es solo MacOS. FAT no distingue entre mayúsculas y minúsculas y, aunque NTFS puede distinguir entre mayúsculas y minúsculas (al igual que HFS +), no es por defecto. También creo que SMB no es según la especificación del protocolo (al menos versiones anteriores). El sistema de archivos utilizado en los CD no es, y así sucesivamente.

Supongo que para evitar cualquier problema desde el principio, Google pensó que era una buena idea forzar los archivos en minúsculas, en cuyo caso no importa qué sistema de archivos está usando o cómo está configurado. Por supuesto, eso es un poco estúpido si todavía puede encontrarse con ese problema con sus archivos de código fuente, sin embargo, que estos pueden ser casos mixtos es una decisión anterior a Android y que ha sido hecha por Sun muchos años antes de que Google incluso soñara con ese sistema .

Cuestiones relacionadas