2010-06-24 7 views
7

È utile avere coerenza nei nomi dei file.Perché i nomi dei file di layout Android sono così limitati?

MyActivity.java contiene la classe pubblico MyActivity

Vorrei che il file XML con il suo layout di essere chiamato res/layout/MyActivity.xml

Ma ottengo un messaggio di errore che dice "il nome del file non valido : deve contenere solo [a-z0-9_.]"

quindi due domande:?

  1. Perché è il set di caratteri in modo limitato (nemmeno maiuscolo Vieni !) - Ah - questa restrizione è probabilmente a posto in modo da non essere avvitato dal file system che non fa distinzione tra lettere maiuscole e minuscole, come HFS + di Apple (anche se vedi Wikipedia per la storia cruenta http://en.wikipedia.org/wiki/Comparison_of_file_systems#cite_note-note-35-77)

  2. Quali nomi di file sono limitati? Tutte le res? solo res/layout? res/layout più alcune altre cartelle?

Qualcuno può confermare 1 e fornire dettagli su 2?

Grazie,

Peter

risposta

9

Perché il set di caratteri in modo limitato

Poiché il nome deve essere un identificatore Java valido, in modo da poter utilizzare le costanti come R.layout.foo per identificare il layout in fase di esecuzione.

Quali nomi di file sono limitati - tutti di res? solo res/layout? res/layout più alcune altre cartelle?

Tutto ciò in res/

+1

Ma ... Ho lettere maiuscole nel mio codice Java ... –

+1

Quella parte che non riesco a spiegare, oltre alla teoria del filesystem del sistema operativo. – CommonsWare

+0

Grazie per una spiegazione plausibile, ma mi chiedo se c'è di più. –

2

Non sono sicuro del motivo per #1. Non ho mai visto una spiegazione in nessuna lettura sulle risorse. Per #2 dalla mia esperienza tutto ciò che verrà utilizzato come id in java ad es., R.drawable.marker, R.string.default_message deve seguire le regole di [a-z0-9_].

0

Quando si utilizza MacOS X come piattaforma di sviluppo, quasi ogni sviluppatore che fare con il codice cross-platform prima o poi correre la questione che il codice sorgente di un progetto Linux/UNIX non può essere costruito dopo il download/checkout/clone perché il progetto ha due file identicamente nominati in una singola directory che variano solo nel caso; e su OS X significa che si finisce con un solo file mentre il secondo sovrascriverà il primo.

Ovviamente HFS + può essere sensibile alla distinzione tra maiuscole e minuscole, ma può essere configurato solo quando si formatta una partizione e per impostazione predefinita tutti i Mac vengono forniti con OS X preinstallato su una partizione preformattata con HFS + senza distinzione tra maiuscole e minuscole (come impostazione predefinita modalità per HFS +). Quindi dovresti prima riformattare il tuo nuovo Mac acquistato e reinstallare OS X per raggiungere questo obiettivo. E poi preparati ai guai visto che molte app si basano su insensibilità alle maiuscole e minuscole sul Mac; un esempio molto famoso è Steam (non è possibile eseguire Steam da un HFS + sensibile al maiuscolo/minuscolo).

E non è solo MacOS. FAT è case-insensitive e mentre NTFS può essere case-sensitive (proprio come HFS +), non è di default. Inoltre, penso che SMB non sia conforme alle specifiche del protocollo (almeno versioni precedenti). Il filesystem usato sui CD non lo è, e così via.

Quindi immagino che per evitare problemi fin dall'inizio, Google ha pensato che sia una buona idea forzare i file in minuscolo, nel qual caso non importa quale filesystem si sta utilizzando o come è configurato. Certo, è un po 'stupido se puoi ancora incorrere in quel problema con i tuoi file di codice sorgente, tuttavia questi possono essere casi misti è una decisione che precede Android e che è stata fatta da Sun molti anni prima che Google sognasse quel sistema .

Problemi correlati