Android - Convention de nom de package

205

Pour l'exemple "Hello World" dans android.com , le nom du package est
"package com.example.helloandroid;"

Existe-t-il une directive / norme pour nommer ce package? (les références seraient bien)

Charles Yeung
la source

Réponses:

230

Android suit les conventions normales des packages java et voici un extrait de texte important à lire (cela est important en ce qui concerne la large utilisation des fichiers xml lors du développement sur Android).

La raison de l'avoir dans l'ordre inverse est liée à la disposition sur le support de stockage. Si vous considérez chaque période ('.') Dans le nom de l'application comme un séparateur de chemin, toutes les applications d'un éditeur seraient regroupées dans la hiérarchie des chemins. Ainsi, par exemple, les packages d'Adobe seraient de la forme:

com.adobe.reader (Adobe Reader)

com.adobe.photoshop (Adobe Photoshop)

com.adobe.ideas (Adobe Ideas)

[Notez que ce n'est qu'une illustration et que ce ne sont peut-être pas les noms de package exacts.]

Ceux-ci pourraient être mappés en interne (respectivement) pour:

com / adobe / lecteur

com / adobe / photoshop

com / adobe / idées

Le concept provient des conventions de dénomination des packages en Java, plus d'informations à ce sujet ici: *

http://en.wikipedia.org/wiki/Java_package#Package_naming_conventions

Source: http://www.quora.com/Why-do-a-majority-of-Android-package-names-begin-with-com

Jimmy Huch
la source
2
voici une (brève) référence sur le site Android - consultez le paragraphe "Nom du package" à developer.android.com/resources/tutorials/hello-world.html
Bojan Komazec
4
Vous avez une erreur dans votre réponse qui pourrait induire les gens en erreur. c'est com.adobe.ideas, et non com.adobe.Ideas (I majuscule). utiliser des majuscules dans les noms de paquets est une mauvaise idée (certains services google ne fonctionneront pas pour vous)
Amir Uval
4
Désolé mec. Après avoir vu votre réponse, j'ai regardé de plus près et mon navigateur a connecté le i à son point, ce qui le fait ressembler à un I.
majestueux
7
@androiddeveloper - Tous les caractères alphanumériques, '.' et «_» est autorisé. Cependant, un nom de package (ou un nom de "sous-package" d'ailleurs, comme "reader" dans com.adobe.reader) ne peut pas commencer par un nombre, ou ne peut pas être un mot clé réservé java (comme "for" ou "while "). Pour lutter contre ces restrictions, vous devez commencer le nom du package par un «_» de premier plan afin que 3.cookies.for.you.com se traduise par com.you._for.cookies._3). Voir la documentation Oracle appropriée pour plus de détails.
Jimmy Huch
1
"Com.appname" serait-il un nom de package valide dans Android?
Mark Buikema
65

Le nom du package est utilisé pour une identification unique de votre application.
Android utilise le nom du package pour déterminer si l'application a été installée ou non.
La dénomination générale est:

com.companyname.applicationname

par exemple:

com.android.Camera

ameyume
la source
2
com peut varier si le nom de domaine de l'entreprise / organisation est différent. c'est à dire. org.wikipedia.wikipediaapp
Niels Abildgaard
7
que faire si quelqu'un prend le nom de mon site Web comme nom de package pour son application Android? Puis-je retirer cette application de la boutique?
Mohammad AlBanna
38

http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html

Les entreprises utilisent leur nom de domaine Internet inversé pour commencer leurs noms de package, par exemple, com.example.mypackage pour un package nommé mypackage créé par un programmeur sur example.com.

Les collisions de noms qui se produisent au sein d'une seule entreprise doivent être traitées par convention au sein de cette entreprise, peut-être en incluant la région ou le nom du projet après le nom de l'entreprise (par exemple, com.example.region.mypackage).

Si vous avez un domaine d'entreprise www.example.com

Ensuite, vous devez utiliser:

com.example.region.projectname

Si vous possédez un nom de domaine comme example.co.uk, il devrait l'être:

uk.co.example.region.projectname

Si vous ne possédez pas de domaine, vous devez alors utiliser votre adresse e-mail:

pour [email protected], cela devrait être:

com.example.name.region.projectname

JCasso
la source
pouvez-vous expliquer pourquoi devrais-je l'utiliser? Quels avantages puis-je obtenir en utilisant le nom de domaine de mon entreprise en tant que nom de package?
batmaci
Veuillez voir cette question StackOverflow comme exemple: stackoverflow.com/questions/8381324/…
JCasso
ok je comprends cela pour garder le nom du package unique mais ma question est quand nous téléchargeons sur google play. Google Play ne s'assure-t-il pas que le nom du package est unique dans le magasin avant sa mise en ligne? donc si nous installons uniquement à partir de Google Play, nous ne devrions pas avoir ce conflit
batmaci
Google play garantit que les identifiants d'application sont uniques. Il n'analyse pas les packages pour les conflits. Il est donc possible que deux intentions / services aient le même nom canonique si les développeurs ne suivent pas cette convention de dénomination. Veuillez voir: developer.android.com/studio/build/application-id.html
JCasso
Que se passe-t-il si vous changez de nom de domaine? De plus, la suggestion de courrier électronique semble un peu dangereuse - et si mon courrier électronique était [email protected] et que Microsoft voulait créer un package foo pour Outlook? Les deux seraient sur com.outlook.foo, non?
HappyDog
6
Com = commercial application (just like .com, most people register their app as a com app)
First level = always the publishing entity's' name
Second level (optional) = sub-devison, group, or project name
Final level = product name

Par exemple, le lanceur Android (écran d'accueil) est Com.Google.android.launcher

Charles
la source
2

Généralement, les 2 premiers "mots" du package sont votre adresse Web inversée. (Vous auriez 3 ici comme convention, si vous aviez un sous-domaine.)

Donc, quelque chose que stackoverflow produit se trouverait probablement dans le package com.stackoverflow.wwhat.customname

quelque chose que asp.net produit pourrait s'appeler net.asp.wwhat.customname.omg.srsly

quelque chose de mysubdomain.toplevel.com serait com.toplevel.mysubdomain.wimporte

Au-delà de cette simple convention, le ciel est la limite. Ceci est une ancienne convention linux pour quelque chose dont je ne me souviens pas exactement ...

Eric
la source
Merci pour la suggestion. Mais y a-t-il une référence sur le site officiel d'Android?
Charles Yeung
La chose la plus proche que j'ai pu trouver était un texte de présentation ici: developer.android.com/guide/topics/manifest/… Mais si vous prenez tout ce qui existe en tant que bibliothèques de packages, vous verrez qu'elles suivent toujours la même convention. http est de org.apache.http, Andengine est org.anddev.andengine, etc etc.
Eric
Quelles sont les règles concernant les caractères autorisés pour le nom du package sur Android? est-ce juste des lettres anglaises, le "." et les caractères "_" autorisés?
développeur android
Merci à tous pour vos commentaires utiles. Je suis confronté à un problème connexe: mon package spectorskydans l'application calendarest référencé dans l'Explorateur de fichiers de périphérique en tant que com.tmp.spectorsky.calendar. Je ne comprends pas pourquoi le tmpniveau apparaît ici?
Spectorsky
-1

Mais si votre application Android est uniquement à des fins personnelles ou créée par vous seul, vous pouvez utiliser:

me.app_name.app
ajdeguzman
la source
10
Vous pouvez dire que la déclaration faite est purement votre opinion :)
Rahul Reddy
@RahulReddy pourquoi est-ce sous-estimé, je ne comprends pas. google ne restreint personne à utiliser com. ou org.! vous pouvez utiliser ce que vous voulez en tant que nom de paquet
batmaci
1
@batmaci Je pense que cela a été rétrogradé car il induit les gens en erreur en utilisant des noms de paquets arbitraires. Même si cela est techniquement possible et que Google ne vérifie pas si le domaine est le vôtre, cela entraînerait une pollution de l'espace de noms et devrait donc être considéré comme une mauvaise pratique.
Oliver Hausler
3
@OliverHausler qu'entendez-vous par pollution de l'espace de noms? ou et comment? pourquoi est-ce si important? Je sais seulement que si vous avez un site Web et que vous souhaitez effectuer un lien profond vers votre application, cela rend les choses plus faciles, mais même sans vous pouvez toujours facilement effectuer un lien profond. les réponses ci-dessus aucun d'entre eux n'explique pourquoi, mais ils répètent simplement ce que Google leur a dit.
batmaci
1
@batmaci Imaginez cette situation: Dev X crée une application (avec un nom non créatif) et "me.app_name.services.MyService". Dev Y, qui se trouve avoir le même surnom que dev X (sisisisi m'a été prise à plusieurs endroits par exemple), crée une application, nom également non créatif, identique au nom de l'application Dev Xs. Dev Y crée un "me.app_name.services.MyService" pour son application. L'utilisateur installe les deux applications, l'une d'entre elles essaie de démarrer son service par son nom - quel service est démarré? Cela semble peu probable, mais considérez le nombre d'applications Android disponibles. L'utilisation de votre e-mail dans le nom du package élimine cette possibilité.
sisisisi