L'Android Documentation me dit que je peux accéder à un chaîne d'un autre paquet en utilisant le "nom du package", quoi que cela signifie: donc dans mon manifeste, je veux accéder à une chaîne que j'ai placée dans un projet de bibliothèque distincte, dans le qui ne fait pas 't même compiler. Mais cela fait: p> pourquoi? Qu'est-ce que la documentation Android signifie qu'il parle du "nom de paquet"? Pourquoi le premier exemple ne fonctionne-t-il pas et pourquoi le deuxième exemple fonctionne-t-il? Je ne veux pas que tous mes noms de ressources fusionnés dans le même fichier com.globalmentor.android package code> --- C'est là que ma classe
r code> est, après tout: p>
r code> --- Je veux qu'ils soient partitionnés dans des packages, comme je les ai écrites. P> P>
5 Réponses :
Si vous l'aimez ou non, les ressources du projet de bibliothèque sont fusionnées dans les ressources du projet d'application, des ressources avec le même nom du projet d'application, qui remplacent ceux des projets de bibliothèque. Regardez le fichier R.java dans le projet d'application pour confirmer. P>
Vous pouvez accéder aux ressources-cadres exportées publiquement en utilisant @android: String / FOO CODE> ("Android" paquet), mais je ne pense pas que vous puissiez exporter des ressources d'un projet de bibliothèque comme celui-ci (encore ). p>
Sérieusement? Quel est le point d'avoir com.myapp.r code> et
com.library.r code> si tous les noms sont toujours clash? Donc, je dois utiliser
com.example.foo.r.id.com_example_foo_bar code> au lieu de
com.example.foo.r.id.bar code> juste pour conserver les noms d'affichage quand ils se fusionnent? Quel étourdi.
Donc, aucune idée de la documentation signifie quand elle dit "Package_Name" (voir la question originale)?
En bref: le préfixe de nom de package est destiné aux bibliothèques partagées, pas pour votre APK. P>
La documentation se lit comme suit: P>
Pour référencer une ressource forte> System forte>, vous aurez besoin d'inclure le nom du package p> blockQuote>
Ceci correspond aux bibliothèques partagées externes (et à leurs ressources), votre demande est liée contre (par exemple les cartes). Ils ont leur propre classe R, non fusionné avec celle de votre application. P>
Ce sont tous des packages Android standard et des bibliothèques partagées que vous avez mentionnées dans la section du manifeste Android. P>
Comme Nikolay a souligné, toutes les ressources de l'application sont fusionnées, c'est pourquoi les projets de la bibliothèque majoritaire utilisent des préfixes telles que ABS__ pour leurs noms de ressources. P>
voir Projets de la bibliothèque Doc pour plus d'informations. P>
Pourquoi? P> blockQuote>
Parce que vous avez ajouté ce projet de bibliothèque à votre projet, Android fusionne ainsi les ressources, le dernier projet construit "gagne" le nom. Pour cette raison, c'est une bonne idée de préfixer les ressources. Dans ce cas, le «nom de paquet» ne peut pas être utilisé car vous avez ces ressources dans votre propre projet. J'imagine que c'est votre cas car il compile sans le nom du paquet. P>
Si vous n'avez pas ce projet de bibliothèque ajouté à votre projet, une solution possible consiste à utiliser Shareduserid. P>
Source: http://developer.android.com/tools/projects/index. HTML P>
Considérations de développement P>
Lorsque vous développez votre projet de bibliothèque et vos applications dépendantes, gardez Les points énumérés ci-dessous à l'esprit: P>
- conflits de ressources car les outils fusionnent les ressources d'un projet de bibliothèque avec celles d'un projet d'application à charge, une donnée L'ID de ressource pourrait être défini dans les deux projets. Dans ce cas, les outils Sélectionnez la ressource à partir de l'application ou de la bibliothèque avec le plus haut priorité et jetez l'autre ressource. Comme vous développez votre les candidatures sont conscientes que les ID de ressources courantes sont susceptibles d'être défini dans plus d'un projet et sera fusionné, avec la ressource de l'application ou la bibliothèque la plus prioritaire prenant la priorité. LI>
- Utilisez des préfixes pour éviter les conflits de ressources pour éviter les conflits de ressources pour les ID de ressources courantes, envisagez d'utiliser un préfixe ou un autre cohérent. schéma de dénomination unique au projet (ou est unique sur tout projets). li> ul> blockQuote>
Nommez votre ressource dans votre package comme com.globalmentor.android.app_aplicationListactivity_lab et non seulement app_applicationlistactivity_lab. p>
alors vous pouvez y accéder à partir de XML comme p>
et programmatiquement par p>
sans conflits. P> xml version = "1.0" coding = "utf-8"?>
....
ressources> code> p>
"@ string / com.globalmentor.android.app_applylistactivity_lab" code> p>
getresources (). getString (r.string.com_globalmentor_android_app_aplicationlistactivity_lab); Code> P>
Vous devez d'abord ajouter une dépendance du premier package (avec vos chaînes) à votre deuxième package P>
Ensuite, allez à votre deuxième package Strings.xml Fichier pour déclarer vos chaînes p>
Ensuite, vous pouvez appeler des chaînes de manière programmatique à partir de votre premier colis p>
appelez une piqûre de manière programmative p>