Android - Paket Adı kuralı


205

Android.com'daki "Merhaba Dünya" örneği için paket adı
"package com.example.helloandroid;"

Bu paketi adlandırmak için herhangi bir kılavuz / standart var mı? (referanslar iyi olurdu)

Yanıtlar:


230

Android, normal java paketi kurallarını izliyor ve burada okunacak metnin önemli bir snippet'i (bu, android üzerinde geliştirilirken xml dosyalarının geniş kullanımı ile ilgili).

Ters sırada olmasının nedeni, depolama ortamındaki düzen ile ilgilidir. Uygulama adındaki her bir dönemi ('.') Yol ayırıcı olarak görürseniz, bir yayımcıdan gelen tüm uygulamalar yol hiyerarşisinde birlikte oturur. Örneğin, Adobe'nin paketleri şu şekildedir:

com.adobe.reader (Adobe Reader)

com.adobe.photoshop (Adobe Photoshop)

com.adobe.ideas (Adobe Ideas)

[Bunun yalnızca bir örnek olduğunu ve bunların tam paket adları olmayabileceğini unutmayın.]

Bunlar dahili olarak şu şekilde eşlenebilir (sırasıyla):

com / kerpiç / okuyucu

com / kerpiç / photoshop

com / kerpiç / fikirler

Konsept, Java'daki Paket Adlandırma Kurallarından gelir; daha fazla bilgiyi buradan okuyabilirsiniz: *

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

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


2
İşte Android sitesinden (kısa) bir referans - developer.android.com/resources/tutorials/hello-world.html
Bojan Komazec

4
Cevabınızda insanları yanıltabilecek bir hata var. com.adobe.ideas ve com.adobe değil. Indeas (başkent I). paket adlarında büyük harf kullanmak kötü bir fikirdir (bazı google hizmetleri sizin için çalışmaz)
Amir Uval

4
Üzgünüm dostum. Cevabınızı gördükten sonra daha yakından baktım ve tarayıcım
i'yi noktaya bağlayarak

7
@androiddeveloper - Tüm alfasayısal karakterler, '.' ve '_' öğesine izin verilir. Ancak, bir paket adı (veya bu konu için "com.adobe.reader içindeki" okuyucu "gibi) bir" alt paket "adı bir sayı ile başlayamaz veya java ayrılmış bir anahtar kelime (" for "veya" gibi " "). Bu kısıtlamalarla mücadele etmek için, paket adını önde gelen bir '_' ile başlatabilirsiniz, böylece 3.cookies.for.you.com com.you._for.cookies._3 anlamına gelecektir). Ayrıntılar için ilgili Oracle belgelerine bakın.
Jimmy Huch

1
"Com.appname" android için geçerli bir paket adı olur mu?
Mark Buikema

65

Paket adı, uygulamanız için benzersiz tanımlama için kullanılır.
Android, uygulamanın yüklenip yüklenmediğini belirlemek için paket adını kullanır.
Genel adlandırma:

com.companyname.applicationname

Örneğin:

com.android.Camera


2
com, şirketin / kuruluşun alan adı farklıysa değişebilir. yani. org.wikipedia.wikipediaapp
Niels Abildgaard

6
Birisi web sitesi adımı Android uygulaması için bir paket adı olarak aldıysa ne olur? Bu uygulamayı mağazadan kaldırabilir miyim?
Mohammad AlBanna

38

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

Şirketler, paket adlarına başlamak için tersine çevrilmiş İnternet etki alanı adlarını kullanırlar; örneğin, example.com'da bir programcı tarafından oluşturulan paketim adlı bir paket için com.example.mypackage.

Tek bir şirkette meydana gelen isim çarpışmalarının, şirket içindeki sözleşmeyle, belki de şirket adından sonra bölge veya proje adı eklenerek gerçekleştirilmesi gerekir (örneğin, com.example.region.mypackage).

Bir şirket alan adınız varsa www.example.com

O zaman kullanmalısınız:

com.example.region.projectname

Example.co.uk gibi bir alan adınız olması gerekiyorsa:

uk.co.example.region.projectname

Bir alan adınız yoksa, e-posta adresinizi kullanmalısınız:

name@example.com için şöyle olmalıdır:

com.example.name.region.projectname


lütfen neden kullanmalıyım açıklayabilir misiniz? şirket alan adımı bir paket adı olarak kullanmamın avantajları nelerdir?
batmaci

Lütfen bu StackOverflow sorusuna örnek olarak bakın: stackoverflow.com/questions/8381324/…
JCasso

Tamam, paket adını benzersiz tutmak için bunu anlıyorum ama sorum Google oyununa yüklediğimizde. google play, çevrimiçi olmadan önce paket adının mağazada benzersiz olmasını sağlamıyor mu? bu yüzden sadece google
play'den yüklersek

Google play, uygulama kimliklerinin benzersiz olmasını sağlar. Paketleri çakışmalara karşı taramaz. Dolayısıyla, geliştiriciler bu adlandırma kuralına uymazlarsa, aynı kanonik isme sahip iki niyet / hizmet mümkündür. Lütfen bakınız: developer.android.com/studio/build/application-id.html
JCasso

Alan adınızı değiştirirseniz ne olur? Ayrıca, e-posta önerisi biraz tehlikeli görünüyor - e-postam foo@outlook.com ve Microsoft Outlook için bir foo paketi oluşturmak isteseydi? Her ikisi de com.outlook.foo'da olur, değil mi?
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

Örneğin, android başlatıcısı (ana ekran) Com.Google.android.launcher


2

Genellikle ilk 2 paket "kelimeler" web adresinizdir. (Alt alanınız olsaydı, burada kongre olarak 3 tane olurdu.)

Stackoverflow'un ürettiği bir şey muhtemelen com.stackoverflow.whatever.customname paketinde olabilir

asp.net'in ürettiği bir şey net.asp.whatever.customname.omg.srsly olarak adlandırılabilir

mysubdomain.toplevel.com'dan bir şey com.toplevel.mysubdomain.whatever olur

Bu basit konvansiyonun ötesinde, gökyüzü sınırdır. Bu tam olarak hatırlayamadığım bir şey için eski bir linux sözleşmesi ...


Önerin için teşekkürler. Ancak, resmi Android sitesinden herhangi bir referans var mı?
Charles Yeung

Bulabildiğim en yakın şey burada bir bulanıklıktı: geliştirici.android.com/ guide/topics/manifest/… Ancak paket kütüphaneleri olarak var olan her şeyi alırsanız, her zaman aynı kuralı izlediklerini göreceksiniz. http org.apache.http adresinden, Andengine org.anddev.andengine, vb.
Eric

Android'de paket adı için hangi karakterlere izin verildiğine ilişkin kurallar nelerdir? sadece İngilizce harfler, "." ve izin verilen "_" karakterleri?
android geliştirici

Yardımcı yorumlar için herkese teşekkürler. İlgili sorunla karşı karşıyayım: spectorskyUygulamadaki paketim calendarAygıt Dosya Gezgini'nde olduğu gibi gönderildi com.tmp.spectorsky.calendar. tmpSeviyenin neden burada göründüğünü anlayamıyorum ?
Spectorsky

-1

Ancak Android Uygulamanız yalnızca kişisel amaçlıysa veya yalnızca sizin tarafınızdan oluşturulmuşsa şunları kullanabilirsiniz:

me.app_name.app

10
Diyebilirsiniz ki, yapılan açıklama tamamen sizsiniz :)
Rahul Reddy

@RahulReddy bu neden indirildi, anlamıyorum. google kimsenin com kullanmasını kısıtlamaz. org.!
paket adı

1
@batmaci Sanırım bu, kullanıcıların rasgele paket isimlerini kullanma konusunda yanlış yönlendirdiği için indirildi. Bu teknik olarak mümkün olsa ve Google, alan adının size ait olup olmadığını doğrulamasa da ad alanı kirliliğine yol açacaktır ve bu nedenle kötü uygulama olarak görülmelidir.
Oliver Hausler

3
@OliverHausler ad alanı kirliliği ile ne demek istiyorsun? nerede ve nasıl? bu neden bu kadar önemli? Sadece bir web siteniz varsa ve uygulamanıza derin bağlantı yapmak istiyorsanız, işleri kolaylaştırır, ancak siz olmadan bile kolayca derin bağlantı kurabilirsiniz. yukarıdaki cevaplar hiçbiri nedenini açıklamıyor ancak google'ın söylediklerini tekrarlıyorlar.
batmaci

1
@batmaci Bu durumu hayal edin: Dev X (yaratıcı olmayan bir adla) uygulama ve içinde "me.app_name.services.MyService" oluşturur. Dev X ile aynı takma adı olan Dev Y (örneğin sisisisi benden birden fazla yerde alındı), Dev Xs uygulama adıyla aynı olan bir uygulama, ad da yaratıcı değil oluşturur. Dev Y uygulaması için bir "me.app_name.services.MyService" oluşturur. Kullanıcı her iki uygulamayı da yükler, bunlardan biri hizmetini adıyla başlatmaya çalışır - hangi hizmet başlatılır? Olası görünmüyor, ancak orada android uygulamaların sayısını düşünün. E-postanızı paket adında kullanmak bu olasılığı ortadan kaldırır.
sisisisi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.