Android - Paketnamenkonvention

205

Für das Beispiel "Hello World" in android.com lautet der Paketname
"package com.example.helloandroid;"

Gibt es eine Richtlinie / einen Standard, um dieses Paket zu benennen? (Referenzen wären nett)

Charles Yeung
quelle

Antworten:

229

Android folgt den normalen Konventionen für Java-Pakete. Hier ist ein wichtiger Textausschnitt zum Lesen (dies ist wichtig für die weit verbreitete Verwendung von XML-Dateien während der Entwicklung auf Android).

Der Grund für die umgekehrte Reihenfolge liegt im Layout auf dem Speichermedium. Wenn Sie jeden Punkt ('.') Im Anwendungsnamen als Pfadtrennzeichen betrachten, sitzen alle Anwendungen eines Herausgebers in der Pfadhierarchie zusammen. So hätten beispielsweise Pakete von Adobe die Form:

com.adobe.reader (Adobe Reader)

com.adobe.photoshop (Adobe Photoshop)

com.adobe.ideas (Adobe-Ideen)

[Beachten Sie, dass dies nur eine Illustration ist und dies möglicherweise nicht die genauen Paketnamen sind.]

Diese können intern (jeweils) zugeordnet werden auf:

com / Adobe / Reader

com / Adobe / Photoshop

com / Adobe / Ideen

Das Konzept stammt aus Paketbenennungskonventionen in Java. Weitere Informationen hierzu finden Sie hier: *

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

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

Jimmy Huch
quelle
2
Hier ist eine (kurze) Referenz von der Android-Site - werfen Sie einen Blick auf den Abschnitt "Paketname" unter developer.android.com/resources/tutorials/hello-world.html
Bojan Komazec,
4
Sie haben einen Fehler in Ihrer Antwort, der Menschen irreführen könnte. Es ist com.adobe.ideas und nicht com.adobe.Ideas (Hauptstadt I). Die Verwendung von Großbuchstaben in Paketnamen ist eine schlechte Idee (einige Google-Dienste funktionieren für Sie nicht)
Amir Uval
4
Tut mir leid, Mann. Nachdem ich Ihre Antwort gesehen hatte, schaute ich genauer hin und mein Browser verband das i mit seinem Punkt, so dass es wie ein Großbuchstabe I aussah. Wie peinlich: S
Amir Uval
7
@androiddeveloper - Alle alphanumerischen Zeichen, '.' und '_' ist erlaubt. Ein Paketname (oder ein "Unterpaket" -Name wie "reader" in com.adobe.reader) kann jedoch nicht mit einer Zahl beginnen oder ein von Java reserviertes Schlüsselwort sein (wie "for" oder "while") "). Um diese Einschränkungen zu bekämpfen, würden Sie den Paketnamen mit einem führenden '_' beginnen, sodass 3.cookies.for.you.com in com.you._for.cookies._3 übersetzt wird. Weitere Informationen finden Sie in der entsprechenden Oracle-Dokumentation .
Jimmy Huch
1
Wäre "com.appname" ein gültiger Paketname in Android?
Mark Buikema
65

Der Paketname wird zur eindeutigen Identifizierung Ihrer Anwendung verwendet.
Android verwendet den Paketnamen, um festzustellen, ob die Anwendung installiert wurde oder nicht.
Die allgemeine Benennung lautet:

com.companyname.applicationname

z.B:

com.android.Camera

ameyume
quelle
2
com kann variieren, wenn der Domainname des Unternehmens / der Organisation unterschiedlich ist. dh. org.wikipedia.wikipediaapp
Niels Abildgaard
6
Was ist, wenn jemand meinen Website-Namen als Paketnamen für seine Android-App verwendet hat? Kann ich diese App aus dem Store entfernen?
Mohammad AlBanna
38

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

Unternehmen verwenden ihren umgekehrten Internetdomänennamen, um mit ihren Paketnamen zu beginnen, z. B. com.example.mypackage für ein Paket mit dem Namen mypackage, das von einem Programmierer unter example.com erstellt wurde.

Namenskollisionen, die innerhalb eines einzelnen Unternehmens auftreten, müssen gemäß den Konventionen innerhalb dieses Unternehmens behandelt werden, z. B. indem die Region oder der Projektname nach dem Firmennamen eingefügt werden (z. B. com.example.region.mypackage).

Wenn Sie eine Unternehmensdomain haben www.example.com

Dann sollten Sie verwenden:

com.example.region.projectname

Wenn Sie einen Domainnamen wie example.co.uk besitzen, sollte dieser sein:

uk.co.example.region.projectname

Wenn Sie keine Domain besitzen, sollten Sie Ihre E-Mail-Adresse verwenden:

für [email protected] sollte es sein:

com.example.name.region.projectname

JCasso
quelle
Kannst du bitte erklären, warum ich es benutzen soll? Welche Vorteile habe ich, wenn ich meinen Unternehmensdomänennamen als Paketnamen verwende?
Batmaci
Bitte sehen Sie diese StackOverflow-Frage als Beispiel: stackoverflow.com/questions/8381324/…
JCasso
ok, ich verstehe das, um den Paketnamen eindeutig zu halten, aber meine Frage ist, wann wir auf Google Play hochladen. Stellt Google Play nicht sicher, dass der Paketname im Store eindeutig ist, bevor er online geht? Wenn wir also nur von Google Play installieren, sollten wir diesen Konflikt nicht haben
Batmaci
Google Play stellt sicher, dass die Anwendungs-IDs eindeutig sind. Die Pakete werden nicht auf Konflikte überprüft. Es ist also möglich, dass zwei Absichten / Dienste denselben kanonischen Namen haben, wenn Entwickler diese Namenskonvention nicht befolgen. Bitte sehen Sie: developer.android.com/studio/build/application-id.html
JCasso
Was passiert, wenn Sie Ihren Domainnamen ändern? Außerdem scheint der Vorschlag für eine E-Mail etwas gefährlich zu sein - was wäre, wenn meine E-Mail [email protected] wäre und Microsoft ein foo-Paket für Outlook erstellen wollte? Beides wäre bei com.outlook.foo, oder?
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

Zum Beispiel ist der Android Launcher (Startbildschirm) Com.Google.android.launcher

Charles
quelle
2

Im Allgemeinen sind die ersten 2 Paket- "Wörter" Ihre Webadresse in umgekehrter Reihenfolge. (Wenn Sie eine Subdomain hätten, hätten Sie hier 3 als Konvention.)

Etwas, das Stackoverflow erzeugt, befindet sich wahrscheinlich im Paket com.stackoverflow.whatever.customname

etwas, das asp.net produziert, könnte net.asp.whatever.customname.omg.srsly heißen

etwas von mysubdomain.toplevel.com wäre com.toplevel.mysubdomain.whatever

Jenseits dieser einfachen Konvention ist der Himmel die Grenze. Dies ist eine alte Linux-Konvention für etwas, an das ich mich nicht genau erinnern kann ...

Eric
quelle
Danke für den Vorschlag. Aber gibt es einen Hinweis von der offiziellen Android-Site?
Charles Yeung
Das Nächste, was ich finden konnte, war ein Klappentext hier: developer.android.com/guide/topics/manifest/… Wenn Sie jedoch alles, was vorhanden ist, als Paketbibliotheken verwenden, werden Sie feststellen , dass sie immer der gleichen Konvention folgen. http ist von org.apache.http, Andengine ist org.anddev.andengine, etc etc.
Eric
Welche Regeln gelten für den Paketnamen unter Android? ist es nur englische Buchstaben, das "." und die "_" Zeichen, die erlaubt sind?
Android-Entwickler
Vielen Dank an alle für hilfreiche Kommentare. Ich habe ein verwandtes Problem: Mein Paket spectorskyin der Anwendung calendarwird im Gerätedateie-Explorer als angezeigt com.tmp.spectorsky.calendar. Ich kann nicht verstehen, warum hier tmpLevel erscheint?
Spectorsky
-1

Wenn Ihre Android-App jedoch nur für persönliche Zwecke oder von Ihnen allein erstellt wurde, können Sie Folgendes verwenden:

me.app_name.app
Ajdeguzman
quelle
10
Sie können sagen, dass die Aussage nur Ihre Meinung ist :)
Rahul Reddy
@ RahulReddy warum ist das herabgestimmt, ich verstehe nicht. Google beschränkt niemanden auf die Verwendung von com. oder org.! Sie können alles, was Sie wollen, als Paketnamen verwenden
Batmaci
1
@batmaci Ich glaube, dies wurde abgelehnt, weil es die Leute dazu verleitet, willkürliche Paketnamen zu verwenden. Auch wenn dies technisch möglich ist und Google nicht überprüft, ob die Domain Ihnen gehört, würde dies zu einer Verschmutzung des Namespace führen und sollte daher als schlechte Praxis angesehen werden.
Oliver Hausler
3
@OliverHausler was meinst du mit Namespace-Verschmutzung? wo und wie? Warum ist das so wichtig? Ich weiß nur, dass, wenn Sie eine Website haben und eine Deeplinking-Verbindung zu Ihrer App herstellen möchten, dies die Dinge einfacher macht, aber auch ohne Sie können Sie die Deeplinking-Funktion problemlos durchführen. oben Antworten keiner von ihnen erklärt warum, aber sie wiederholen nur, was Google ihnen gesagt hat.
Batmaci
1
@batmaci Stellen Sie sich diese Situation vor: Dev X erstellt eine App (mit einem nicht kreativen Namen) und darin "me.app_name.services.MyService". Dev Y, der zufällig den gleichen Spitznamen wie dev X hat (sisisisi wurde mir beispielsweise an mehreren Stellen abgenommen), erstellt eine App, deren Name ebenfalls nicht kreativ ist, genau wie der Name der Dev X-App. Dev Y erstellt einen "me.app_name.services.MyService" für seine App. Der Benutzer installiert beide Apps. Eine von ihnen versucht, ihren Dienst über den Namen zu starten. Welcher Dienst wird gestartet? Scheint unwahrscheinlich, aber bedenken Sie die Anzahl der Android-Apps da draußen. Durch die Verwendung Ihrer E-Mail-Adresse im Paketnamen wird diese Möglichkeit ausgeschlossen.
Sisisisi