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)

[Зверніть увагу, що це лише ілюстрація, і це можуть бути не точні назви пакетів.]

Вони можуть бути внутрішньо відображені (відповідно) до:

com / adobe / читач

com / adobe / Photoshop

com / adobe / ідеї

Концепція походить від конвенцій про іменування пакунків на 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
Bojan Komazec

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

4
Вибач, чоловіче. Побачивши вашу відповідь, я придивився уважніше, і мій браузер зв’язав i з його крапкою, зробивши це схожим на велику столицю I. Як бентежно: S
Амір Увал

7
@androiddeveloper - Усі буквено-цифрові символи, '.' і "_" дозволено. Однак ім'я пакету (або ім'я "підпакет" для цього питання, наприклад, "читач" у com.adobe.reader) не може починатися з числа, або не може бути ключовим словом, зарезервованим у Java (наприклад, "для" або "поки" "). Для боротьби з цими обмеженнями ви б розпочали ім'я пакета з провідним "_", тому 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
Нільс Абілдгаард

6
що робити, якщо хтось взяв назву мого веб-сайту як назву пакета для свого додатка Android? Чи можна зняти цю програму з магазину?
Mohammad AlBanna

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

Наприклад, він запускає Android (домашній екран) Com.Google.android.launcher


2

Як правило, перші 2 слова "слова" - це ваша веб-адреса в зворотному порядку. (Якщо у вас був субдомен, ви б тут мали 3 місця.)

Отже, щось, що виробляє stackoverflow, ймовірно, буде в пакеті com.stackoverflow.wwhat.customname

те, що виробляє asp.net, може називатися net.asp.wwhat.customname.omg.srsly

щось із mysubdomain.toplevel.com буде com.toplevel.mysubdomain.wever

Поза такою простою умовою, небо є межею. Це стара конвенція Linux для чогось, чого я точно не можу згадати ...


Дякую за пропозицію. Але чи є посилання з офіційного сайту Android?
Чарльз Єун

Найближче, що я міг знайти тут - розмиття: developer.android.com/guide/topics/manifest/… Але якщо ви візьмете все, що існує, як бібліотеки пакетів, ви побачите, що вони завжди дотримуються тієї ж конвенції. http - від org.apache.http, Andengine - org.anddev.andengine тощо тощо
Ерік

Які правила щодо того, які символи дозволені для імені пакета на Android? це лише англійські букви, "". та символи "_", дозволені?
андроїд розробник

Дякую всім за корисні коментарі. Я зіткнувся з пов’язаною проблемою: мій пакет spectorskyу програмі calendarнадається у Провіднику файлів пристроїв як com.tmp.spectorsky.calendar. Я не можу зрозуміти, чому tmpтут з'являється рівень?
Спекторський

-1

Але якщо ваш додаток для Android призначений лише для особистих цілей або створений лише вами, ви можете використовувати:

me.app_name.app

10
Ви можете сказати, що зроблена заява - це суто ваша думка :)
Рахул Редді

@RahulReddy, чому це спростовано, я не розумію. Google не забороняє нікому користуватися ком. або орг.! ви можете використовувати все, що завгодно, як
ім'я пакету

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" для свого додатка. Користувач встановлює обидва додатки, один із них намагається запустити свою послугу по імені - яка служба запускається? Здається, малоймовірно, але врахуйте кількість андроїд-програм там. Використання електронної пошти у назві пакета виключає таку можливість.
sisisisi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.