Android - Соглашение об имени пакета


205

Для примера «Hello World» на android.com имя пакета
"package com.example.helloandroid;"

Есть ли какое-либо руководство / стандарт, чтобы назвать этот пакет? (ссылки были бы хорошими)

Ответы:


230

Android следует обычным соглашениям о пакете Java, плюс здесь есть важный фрагмент текста для чтения (это важно в отношении широкого использования XML-файлов при разработке на Android).

Причина, по которой он установлен в обратном порядке, связана с макетом на носителе. Если вы рассматриваете каждый период ('.') В имени приложения как разделитель пути, все приложения от издателя будут находиться вместе в иерархии путей. Так, например, пакеты от Adobe будут иметь вид:

com.adobe.reader (Adobe Reader)

com.adobe.photoshop (Adobe Photoshop)

com.adobe.ideas (Adobe Ideas)

[Обратите внимание, что это только иллюстрация, и это могут быть не точные названия пакетов.]

Они могут быть внутренне сопоставлены (соответственно):

ком / саман / читатель

ком / саман / фотомагазин

ком / саман / идеи

Концепция основана на соглашениях об именовании пакетов в Java, подробнее о которых можно прочитать здесь: *

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

Источник: http://www.quora.com/Why-do-a-majority-of-Android-package-names-begin-with-com


2
вот (краткая) ссылка с сайта Android - посмотрите параграф «Имя пакета» на developer.android.com/resources/tutorials/hello-world.html
Боян Комазек,

4
В вашем ответе есть ошибка, которая может ввести людей в заблуждение. это com.adobe.ideas, а не com.adobe.Ideas (столица I). использование заглавных букв в именах пакетов - плохая идея (некоторые службы Google не будут работать для вас)
Амир Увал,

4
Извини чувак. Увидев ваш ответ, я посмотрел поближе, и мой браузер соединил точку с точкой i, превратив ее в заглавную букву I. Как неловко: S
Амир Увал,

7
@androiddeveloper - Все буквенно-цифровые символы, '.' и '_' разрешено. Однако имя пакета (или имя «подпакета» в этом отношении, например «reader» в com.adobe.reader) не может начинаться с цифры или не может быть зарезервированным ключевым словом java (например, «for» или «while»). «). Чтобы преодолеть эти ограничения, вы должны начать имя пакета с начального '_', поэтому 3.cookies.for.you.com будет переводиться в com.you._for.cookies._3). Подробности смотрите в соответствующей документации Oracle .
Джимми Хью

1
Будет ли com.appname верным именем пакета в Android?
Марк Буйкема

65

Имя пакета используется для уникальной идентификации вашего приложения.
Android использует имя пакета, чтобы определить, установлено приложение или нет.
Общее название:

com.companyname.applicationname

например:

com.android.Camera


2
com может отличаться, если доменное имя компании / организации отличается. то есть. org.wikipedia.wikipediaapp
Нильс

7
Что если кто-то взял имя моего сайта в качестве имени пакета для своего приложения для Android? Могу ли я взять это приложение из магазина?
Мохаммед АльБанна

38

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

Компании используют свое обратное доменное имя в Интернете для начала имен своих пакетов, например, com.example.mypackage для пакета с именем mypackage, созданного программистом на example.com.

Конфликты имен, которые происходят в пределах одной компании, должны обрабатываться в рамках соглашения внутри этой компании, возможно, путем включения региона или названия проекта после названия компании (например, com.example.region.mypackage).

Если у вас есть домен компании www.example.com

Тогда вы должны использовать:

com.example.region.projectname

Если у вас есть доменное имя, например example.co.uk, то оно должно быть:

uk.co.example.region.projectname

Если у вас нет домена, вам следует использовать свой адрес электронной почты:

для name@example.com это должно быть:

com.example.name.region.projectname


не могли бы вы объяснить, почему я должен его использовать? Какие преимущества я получу, используя доменное имя моей компании в качестве названия пакета?
batmaci

Пожалуйста, посмотрите этот вопрос StackOverflow в качестве примера: stackoverflow.com/questions/8381324/…
JCasso

Хорошо, я понимаю, что имя пакета остается уникальным, но мой вопрос, когда мы загружаем в Google Play. разве google play не гарантирует, что имя пакета в магазине будет уникальным, прежде чем оно появится в сети? так что, если мы устанавливаем только из Google Play, у нас не должно быть этого конфликта
batmaci

Google play гарантирует, что идентификаторы приложений уникальны. Он не сканирует пакеты на наличие конфликтов. Таким образом, возможно, что два намерения / сервиса имеют одно и то же каноническое имя, если разработчики не соблюдают это соглашение об именах. Пожалуйста, смотрите: developer.android.com/studio/build/application-id.html
JCasso

Что произойдет, если вы измените свое доменное имя? Кроме того, предложение для электронной почты кажется немного опасным - что, если бы моя электронная почта была foo@outlook.com и Microsoft захотела создать пакет foo для Outlook? Оба будут на com.outlook.foo, верно?
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

Например он запускает андроид (домашний экран) Com.Google.android.launcher


2

Как правило, первые 2 пакета «слова» - это ваш обратный веб-адрес. (У вас было бы 3 здесь как соглашение, если бы у вас был поддомен.)

Так что что-то, что производит stackoverflow, скорее всего, будет в пакете com.stackoverflow.whwhat.customname

что-то, что производит asp.net, может называться net.asp.whwhat.customname.omg.srsly

что-то из mysubdomain.toplevel.com будет com.toplevel.mysubdomain.wh независимо

За пределами этого простого соглашения небо - предел. Это старая Linux-конвенция для чего-то, что я точно не могу вспомнить ...


Спасибо за предложение. Но есть ли ссылка с официального сайта Android?
Чарльз Юнг

Самой близкой вещью, которую я смог найти, была реклама: developer.android.com/guide/topics/manifest/… Но если вы возьмете все, что существует, как библиотеки пакетов, вы увидите, что они всегда следуют одному и тому же соглашению. HTTP от org.apache.http, AndEngine является org.anddev.andengine, и т.д. и т.п.
Эрик

Какие правила о том, какие символы разрешены для имени пакета в Android? это просто английские буквы, "." а символы "_", которые разрешены?
Android-разработчик

Спасибо всем за полезные комментарии. Я сталкиваюсь со связанной проблемой: мой пакет spectorskyв приложении calendarупоминается в Device File Explorer как com.tmp.spectorsky.calendar. Я не могу понять, почему tmpуровень появляется здесь?
Спекторский

-1

Но если ваше Android-приложение предназначено только для личных целей или создано только вами, вы можете использовать:

me.app_name.app

10
Вы можете сказать, что сделанное заявление является исключительно вашим мнением :)
Рахул Редди

@RahulReddy, почему это опровергнуто, я не понимаю. Google не запрещает кому-либо использовать com. или орг.! Вы можете использовать все, что хотите в качестве названия пакета
batmaci

1
@batmaci Я считаю, что это было отвергнуто, потому что это вводит людей в заблуждение при использовании произвольных имен пакетов. Даже если это технически возможно, и Google не проверяет, принадлежит ли домен вашему домену, это приведет к загрязнению пространства имен и поэтому должно рассматриваться как плохая практика.
Оливер Хауслер

3
@OliverHausler Что вы подразумеваете под загрязнением пространства имен? где и как? почему это так важно? Я только знаю, что если у вас есть веб-сайт, и вы хотите делать глубокие ссылки на свое приложение, это делает вещи проще, но даже без вас вы все равно можете легко ссылаться на них. выше ответы ни один из них не объясняет, почему, но они просто повторяют то, что сказал им Google.
Batmaci

1
@batmaci Представьте себе такую ​​ситуацию: Dev X создает приложение (с не креативным именем) и в нем «me.app_name.services.MyService». Dev Y, который, как оказалось, имеет тот же псевдоним, что и dev X (sisisisi был взят у меня в нескольких местах, например), создает приложение, имя также не является креативным, как и имя приложения Dev Xs. Dev Y создает «me.app_name.services.MyService» для своего приложения. Пользователь устанавливает оба приложения, одно из них пытается запустить свою службу по имени - какая служба запущена? Кажется маловероятным, но рассмотрим количество приложений для Android там. Использование вашей электронной почты в названии пакета исключает эту возможность.
Сисисиси
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.