web-dev-qa-db-fra.com

Déclaration d'espace de noms XML: nom de package à substitution automatique

J'ai un Android avec plusieurs cibles de build (en utilisant ant). À des fins de test, ces cibles de build ont toutes des noms de package différents (donc mon nom de package est com.mycompany.myapp pour la version de construction et com.mycompany.myapp.test pour la génération de test).

Cela fonctionne bien pour la plupart, sauf en ce qui concerne les espaces de noms xml personnalisés dans les fichiers de disposition. Donc ça:

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:custom="http://schemas.Android.com/apk/res/com.mycompany.myapp" />

cessera de fonctionner dès que le nom du package sera remplacé par com.mycompany.myapp.test.
Pour cette raison, je dois remplacer la valeur com.mycompany.myapp à chaque fois pendant la préconfiguration. Et puisque tous ces fichiers devraient être dans vcs, et ne devraient pas entrer en conflit à chaque fois qu'une personne change de configuration et les fusionne, j'ai dû déplacer les fichiers de disposition dans un dossier de configuration spécifique, où ils ressembleraient à:

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:custom="http://schemas.Android.com/apk/res/@CONFIG.PACKAGENAME@" />

Maintenant, ces fichiers sont stockés dans vcs, et @ CONFIG.PACKAGENAME @ est remplacé pendant la préconfection, puis le fichier est copié de ./config/file.xml vers ./res/layout/file.xml.

Ceci est extrêmement peu pratique et ne s'adapte pas vraiment bien (je ne peux pas imaginer mentionner chacun des 50 fichiers comme dans le script de construction).

Ma question est donc la suivante: existe-t-il un moyen d'utiliser automatiquement le nom du package actuel dans la déclaration d'espace de noms? Ou au moins des fichiers de mise en page modife (ou des fichiers de construction?) Afin que je n'aie pas à remplacer com.mycompany.myapp chaque fois que je change de nom de package.

47
Alexey

Il s'avère qu'il existe un suffixe pour cela: res-auto.

Il vous suffit donc d'écrire

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:custom="http://schemas.Android.com/apk/res-auto" />

Cela utilisera automatiquement le nom du package actuel.

118
Alexey