2010-06-24 9 views
7

Il est bon d'avoir une cohérence dans les noms de fichiers.Pourquoi les noms de fichiers de mise en page Android sont-ils si limités?

MyActivity.java contient la classe publique MyActivity

Je voudrais que le fichier xml avec sa mise en page à appeler res/layout/MyActivity.xml

Mais je reçois un message d'erreur indiquant « nom de fichier non valide : doit contenir seulement [un z0-9_.] »

donc deux questions:

  1. Pourquoi le jeu de caractères si limité (même pas majuscules Allez !) - Ah - cette restriction est probablement en place pour que vous ne serez jamais vissable par les systèmes de fichiers qui ne fait pas de distinction entre les majuscules et les minuscules, comme HFS Apple + (bien que voir Wikipedia pour l'histoire gore http://en.wikipedia.org/wiki/Comparison_of_file_systems#cite_note-note-35-77)

  2. Quels noms de fichiers sont restreints - tous de res? juste res/layout? res/layout plus quelques autres dossiers?

Quelqu'un peut-il confirmer 1 et donner des détails sur 2?

Merci,

Peter

Répondre

9

Pourquoi le jeu de caractères si limité

Parce que le nom doit être un identifiant Java valide, vous pouvez utiliser des constantes comme R.layout.foo pour identifier la mise en page lors de l'exécution.

Quels sont les noms de fichiers sont limités - toutes de res? juste res/layout? res/layout plus quelques autres dossiers?

Tout en res/

+1

Mais ... J'ai des lettres majuscules dans mon code Java ... –

+1

Cette partie, je ne peux pas expliquer, autre que votre théorie du système de fichiers OS. – CommonsWare

+0

Merci pour une explication plausible, mais je me demande s'il y a plus. –

2

Je ne sais pas la raison de #1. Jamais vu une explication dans les lectures sur les ressources. Pour #2 de mon expérience tout ce qui sera utilisé comme identifiant dans Java, par exemple, R.drawable.marker, R.string.default_message doit suivre ces règles de [a-z0-9_].

0

Lorsque vous utilisez Mac OS X en tant que plate-forme de développement, presque tout développeur traitant de code multi-plateforme se déroulera tôt ou tard dans la question que le code source d'un projet Linux/UNIX ne peut pas être construit après le téléchargement/checkout/clone parce que le projet a deux fichiers nommés de manière identique dans un seul répertoire qui ne varient que dans le cas; et sur OS X cela signifie que vous vous retrouvez avec un seul fichier car le second écrasera le premier. Bien sûr, HFS + peut être sensible à la casse, mais cela ne peut être configuré que lorsque vous formatez une partition. Par défaut, tous les Mac sont équipés d'OS X préinstallés sur une partition préformatée avec un HFS + insensible à la casse. mode pour HFS +). Donc, vous devez d'abord reformater votre Mac nouvellement acheté et réinstaller OS X pour atteindre cet objectif. Et puis préparez-vous à des problèmes car de nombreuses applications reposent sur l'insensibilité à la casse sur le Mac; un exemple très célèbre est Steam (vous ne pouvez pas exécuter Steam à partir d'un HFS + sensible à la casse).

Et ce n'est pas seulement MacOS. FAT est sensible à la casse et, bien que NTFS puisse être sensible à la casse (tout comme HFS +), il ne l'est pas par défaut. Aussi je pense que SMB n'est pas conforme aux spécifications du protocole (au moins les anciennes versions). Le système de fichiers utilisé sur les CD ne l'est pas, et ainsi de suite.

Donc, pour éviter tout problème dès le début, Google a pensé que c'était une bonne idée de forcer les fichiers en minuscules, auquel cas peu importe le système de fichiers que vous utilisez ou comment il est configuré. Bien sûr, c'est un peu stupide si vous pouvez toujours rencontrer ce problème avec vos fichiers de code source, mais que ces cas sont une décision antérieure à Android et qui a été faite par Sun plusieurs années avant que Google ne rêve de ce système. .