Android - Convenzione sul nome del pacchetto


205

Per l'esempio "Hello World" in android.com , il nome del pacchetto è
"package com.example.helloandroid;"

Esistono linee guida / standard per nominare questo pacchetto? (i riferimenti sarebbero carini)

Risposte:


230

Android segue le normali convenzioni dei pacchetti java, inoltre ecco un importante frammento di testo da leggere (questo è importante per quanto riguarda l'ampio uso di file xml durante lo sviluppo su Android).

Il motivo per averlo in ordine inverso è a che fare con il layout sul supporto di archiviazione. Se si considera ogni punto ('.') Nel nome dell'applicazione come un separatore di percorso, tutte le applicazioni di un editore si collocherebbero insieme nella gerarchia del percorso. Quindi, per esempio, i pacchetti di Adobe sarebbero nel formato:

com.adobe.reader (Adobe Reader)

com.adobe.photoshop (Adobe Photoshop)

com.adobe.ideas (Adobe Ideas)

[Si noti che questa è solo un'illustrazione e questi potrebbero non essere i nomi esatti del pacchetto.]

Questi potrebbero essere mappati internamente (rispettivamente) a:

com / adobe / lettore

com / adobe / photoshop

com / adobe / idee

Il concetto deriva dalle Convenzioni di denominazione dei pacchetti in Java, di cui puoi leggere di più qui: *

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

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


2
ecco un (breve) riferimento dal sito Android - dai un'occhiata al paragrafo "Nome pacchetto" su developer.android.com/resources/tutorials/hello-world.html
Bojan Komazec,

4
Hai un errore nella tua risposta che potrebbe fuorviare le persone. è com.adobe.ideas e non com.adobe.Ideas (maiuscola I). usare le maiuscole nei nomi dei pacchetti è una cattiva idea (alcuni servizi di Google non funzioneranno per te)
Amir Uval,

4
Scusa. Dopo aver visto la tua risposta, ho dato un'occhiata più da vicino e il mio browser ha collegato l'i con il suo punto, facendolo sembrare una maiuscola I. Che imbarazzante: S
Amir Uval,

7
@androiddeveloper - Tutti i caratteri alfanumerici, "." e '_' è permesso. Tuttavia, un nome di pacchetto (o un nome di "sotto-pacchetto" in tal senso, come "reader" in com.adobe.reader) non può iniziare con un numero o non può essere una parola chiave riservata java (come "for" o "while "). Per combattere queste restrizioni, inizieresti il ​​nome del pacchetto con un '_' iniziale, quindi 3.cookies.for.you.com tradurrebbe in com.you._for.cookies._3). Vedere la documentazione Oracle pertinente per i dettagli.
Jimmy Huch,

1
"Com.appname" sarebbe un nome di pacchetto valido in Android?
Mark Buikema,

65

Il nome del pacchetto viene utilizzato per l'identificazione univoca per l'applicazione.
Android utilizza il nome del pacchetto per determinare se l'applicazione è stata installata o meno.
La denominazione generale è:

com.companyname.applicationname

per esempio:

com.android.Camera


2
com può variare, se il nome di dominio dell'azienda / organizzazione è diverso. vale a dire. org.wikipedia.wikipediaapp
Niels Abildgaard,

7
cosa succede se qualcuno prende il nome del mio sito Web come nome del pacchetto per la sua app Android? Posso rimuovere questa app dallo store?
Mohammad AlBanna,

38

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

Le aziende utilizzano il nome di dominio Internet invertito per iniziare i nomi dei pacchetti, ad esempio com.example.mypackage per un pacchetto denominato mypackage creato da un programmatore su example.com.

Le collisioni di nomi che si verificano all'interno di una singola azienda devono essere gestite per convenzione all'interno di quella società, magari includendo la regione o il nome del progetto dopo il nome della società (ad esempio com.example.region.mypackage).

Se disponi di un dominio aziendale www.example.com

Quindi dovresti usare:

com.example.region.projectname

Se possiedi un nome di dominio come example.co.uk di quanto dovrebbe essere:

uk.co.example.region.projectname

Se non possiedi un dominio, devi utilizzare il tuo indirizzo email:

per nome@esempio.com dovrebbe essere:

com.example.name.region.projectname


puoi per favore spiegare perché dovrei usarlo? quali vantaggi ottengo utilizzando il nome di dominio della mia azienda come nome pacchetto?
Batmaci,

Si prega di consultare questa domanda StackOverflow come un esempio: stackoverflow.com/questions/8381324/...
JCasso

ok lo capisco per mantenere unico il nome del pacchetto, ma la mia domanda è quando eseguiamo il caricamento su Google Play. Google Play non garantisce che il nome del pacchetto sia univoco nel negozio prima che sia online? quindi se installiamo solo da Google Play, non dovremmo avere questo conflitto
batmaci,

Google play garantisce che gli ID applicazione siano unici. Non esegue la scansione dei pacchetti alla ricerca di conflitti. Quindi è possibile che due intenti / servizi abbiano lo stesso nome canonico se gli sviluppatori non seguono questa convenzione di denominazione. Si prega di consultare: developer.android.com/studio/build/application-id.html
JCasso

Cosa succede se cambi il nome del tuo dominio? Inoltre, il suggerimento per l'e-mail sembra un po 'pericoloso: cosa succederebbe se la mia e-mail fosse foo@outlook.com e Microsoft volesse creare un pacchetto foo per Outlook? Entrambi sarebbero su com.outlook.foo, giusto?
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

Ad esempio, il launcher Android (schermata iniziale) è Com.Google.android.launcher


2

Generalmente le prime 2 parole "pacchetto" sono il tuo indirizzo web al contrario. (Ne avresti 3 qui come convenzione, se avessi un sottodominio.)

Quindi qualcosa che stackoverflow produce sarebbe probabilmente nel pacchetto com.stackoverflow.whatever.customname

qualcosa che asp.net produce potrebbe essere chiamato net.asp.whatever.customname.omg.srsly

qualcosa da mysubdomain.toplevel.com sarebbe com.toplevel.mysubdomain.whatever

Oltre quella semplice convenzione, il cielo è il limite. Questa è una vecchia convenzione di Linux per qualcosa che non ricordo esattamente ...


Grazie per il suggerimento Ma c'è qualche riferimento dal sito Android ufficiale?
Charles Yeung,

La cosa più vicina che ho potuto trovare è stata un po 'qui: developer.android.com/guide/topics/manifest/… Ma se prendi tutto ciò che esiste come librerie di pacchetti, vedrai che seguono sempre la stessa convenzione. http proviene da org.apache.http, Andengine è org.anddev.andengine, ecc. ecc.
Eric

Quali sono le regole su quali caratteri sono ammessi per il nome del pacchetto su Android? sono solo lettere inglesi, il "." e i caratteri "_" consentiti?
sviluppatore Android il

Grazie a tutti per commenti utili. Sono di fronte a un problema correlato: il mio pacchetto spectorskynell'applicazione calendarè rinominato in Device File Explorer come com.tmp.spectorsky.calendar. Non riesco a capire perché il tmplivello appare qui?
Spectorsky,

-1

Ma se la tua app Android è solo per scopi personali o creata da te solo, puoi utilizzare:

me.app_name.app

10
Puoi dire che la dichiarazione fatta è puramente tua opinione :)
Rahul Reddy,

@RahulReddy perché è downvoted, non capisco. google non limita a nessuno l'uso di com. o org.! puoi usare quello che vuoi come nomepacchetto
batmaci

1
@batmaci Credo che questo sia stato ridimensionato perché induce in errore le persone a usare nomi di pacchetti arbitrari. Anche se questo potrebbe essere tecnicamente possibile e Google non verifica se il dominio è tuo, ciò comporterebbe l'inquinamento dello spazio dei nomi e dovrebbe pertanto essere considerato una cattiva pratica.
Oliver Hausler,

3
@OliverHausler cosa intendi per inquinamento dello spazio dei nomi? dove e come? perché è così importante? so solo che se hai un sito web e vuoi fare il deeplinking alla tua app, questo rende le cose più facili ma anche senza di te puoi ancora facilmente il deeplink. le risposte sopra non spiegano perché, ma ripetono semplicemente ciò che Google ha detto loro.
Batmaci,

1
@batmaci Immagina questa situazione: Dev X crea un'app (con un nome non creativo) e in essa "me.app_name.services.MyService". Dev Y, che ha lo stesso soprannome di dev X (ad esempio, sisisisi è stato preso da me in più punti), crea un'app, anche il nome non è creativo, come il nome dell'app Dev Xs. Dev Y crea un "me.app_name.services.MyService" per la sua app. L'utente installa entrambe le app, una delle quali tenta di avviare il servizio in base al nome: quale servizio viene avviato? Sembra improbabile, ma considera il numero di app Android disponibili. L'uso della tua e-mail nel nome del pacchetto elimina questa possibilità.
sisisisi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.