Android - Konvensi Nama Paket

205

Untuk contoh "Hello World" di android.com , nama paketnya adalah
"package com.example.helloandroid;"

Apakah ada pedoman / standar untuk memberi nama paket ini? (referensi akan menyenangkan)

Charles Yeung
sumber

Jawaban:

230

Android mengikuti konvensi paket java normal plus di sini adalah potongan teks yang penting untuk dibaca (ini penting mengenai penggunaan luas file xml saat mengembangkan di android).

Alasan untuk membuatnya dalam urutan terbalik adalah karena tata letak pada media penyimpanan. Jika Anda menganggap setiap periode ('.') Dalam nama aplikasi sebagai pemisah jalur, semua aplikasi dari penerbit akan duduk bersama dalam hierarki jalur. Jadi, misalnya, paket dari Adobe akan berbentuk:

com.adobe.reader (Adobe Reader)

com.adobe.photoshop (Adobe Photoshop)

com.adobe.ideas (Adobe Ideas)

[Perhatikan bahwa ini hanyalah ilustrasi dan ini mungkin bukan nama paket yang tepat.]

Ini secara internal dapat dipetakan (masing-masing) untuk:

com / adobe / reader

com / adobe / photoshop

com / adobe / gagasan

Konsep ini berasal dari Konvensi Penamaan Paket di Jawa, lebih lanjut tentang yang dapat dibaca di sini: *

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

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

Jimmy Huch
sumber
2
inilah referensi (singkat) dari situs Android - lihat paragraf "Nama Paket" di developer.android.com/resources/tutorials/hello-world.html
Bojan Komazec
4
Anda memiliki kesalahan dalam jawaban Anda yang mungkin menyesatkan orang. itu com.adobe.ideas, dan bukan com.adobe.Ideas (modal I). menggunakan huruf besar dalam nama paket adalah ide yang buruk (beberapa layanan google tidak akan bekerja untuk Anda)
Amir Uval
4
Maaf teman. Setelah melihat jawaban Anda, saya melihat lebih dekat, dan browser saya menghubungkan saya dengan titiknya, membuatnya tampak seperti huruf kapital I. Sungguh memalukan: S
Amir Uval
7
@androiddeveloper - Semua karakter alfanumerik, '.' dan '_' diizinkan. Namun, nama paket (atau nama "sub paket" untuk masalah ini, seperti "pembaca" di com.adobe.reader) tidak dapat dimulai dengan angka, atau tidak dapat berupa kata kunci yang dipesan java (seperti "untuk" atau "sementara "). Untuk mengatasi pembatasan ini, Anda akan memulai nama paket dengan '_' yang memimpin sehingga 3.cookies.for.you.com akan diterjemahkan menjadi com.you._for.cookies._3). Lihat dokumentasi Oracle yang relevan untuk detailnya.
Jimmy Huch
1
Apakah "com.appname" menjadi nama paket yang valid di android?
Mark Buikema
65

Nama paket digunakan untuk identifikasi unik untuk aplikasi Anda.
Android menggunakan nama paket untuk menentukan apakah aplikasi telah diinstal atau belum.
Penamaan umum adalah:

com.companyname.applicationname

misalnya:

com.android.Camera

ameyume
sumber
2
com dapat bervariasi, jika nama domain perusahaan / organisasi berbeda. yaitu. org.wikipedia.wikipediaapp
Niels
7
bagaimana jika seseorang mengambil nama situs web saya sebagai nama paket untuk aplikasi Android-nya? Bisakah saya menghapus aplikasi ini dari toko?
Mohammad AlBanna
38

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

Perusahaan menggunakan nama domain Internet terbalik mereka untuk memulai nama paket mereka — misalnya, com.example.mypackage untuk paket bernama mypackage yang dibuat oleh seorang programmer di example.com.

Tabrakan nama yang terjadi dalam satu perusahaan perlu ditangani dengan konvensi di dalam perusahaan itu, mungkin dengan memasukkan wilayah atau nama proyek setelah nama perusahaan (misalnya, com.example.region.mypackage).

Jika Anda memiliki domain perusahaan www.example.com

Maka Anda harus menggunakan:

com.example.region.projectname

Jika Anda memiliki nama domain seperti example.co.uk dari yang seharusnya:

uk.co.example.region.projectname

Jika Anda tidak memiliki domain, Anda harus menggunakan alamat email Anda:

untuk [email protected] seharusnya:

com.example.name.region.projectname

JCasso
sumber
dapatkah Anda menjelaskan mengapa saya harus menggunakannya? manfaat apa yang saya dapatkan dengan menggunakan nama domain perusahaan saya sebagai nama paket?
batmaci
Silakan lihat pertanyaan StackOverflow ini sebagai contoh: stackoverflow.com/questions/8381324/…
JCasso
ok saya mengerti ini untuk menjaga nama paket tetap unik tetapi pertanyaan saya adalah kapan kita mengunggah ke google play. tidakkah google play memastikan bahwa nama paket itu unik di toko sebelum daring? jadi jika kita hanya menginstal dari google play, kita seharusnya tidak memiliki konflik ini
batmaci
Google play memastikan bahwa id aplikasi unik. Itu tidak memindai paket untuk konflik. Jadi ada kemungkinan bahwa dua maksud / layanan memiliki nama kanonik yang sama jika pengembang tidak mengikuti konvensi penamaan ini. Silakan lihat: developer.android.com/studio/build/application-id.html
JCasso
Apa yang terjadi jika Anda mengubah nama domain Anda? Juga, saran untuk email sepertinya agak berbahaya - bagaimana jika email saya adalah [email protected] dan Microsoft ingin membuat paket foo untuk Outlook? Keduanya akan di com.outlook.foo, kan?
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

Misalnya dia peluncur android (layar utama) adalah Com.Google.android.launcher

charles
sumber
2

Secara umum 2 paket "kata" pertama adalah alamat web Anda secara terbalik. (Anda akan memiliki 3 di sini sebagai konvensi, jika Anda memiliki subdomain.)

Jadi sesuatu yang dihasilkan stackoverflow kemungkinan akan ada dalam paket com.stackoverflow.whthing.customname

sesuatu yang dihasilkan asp.net dapat disebut net.asp.whthing.customname.omg.srsly

sesuatu dari mysubdomain.toplevel.com akan menjadi com.toplevel.mysubdomain.apa pun

Di luar konvensi sederhana itu, langit adalah batasnya. Ini adalah konvensi linux lama untuk sesuatu yang saya tidak ingat persis ...

Eric
sumber
Terima kasih untuk sarannya. Tapi, adakah referensi dari situs Android resmi?
Charles Yeung
Hal terdekat yang bisa saya temukan adalah uraian di sini: developer.android.com/guide/topics/manifest/… Tetapi jika Anda mengambil semua yang ada sebagai pustaka paket, Anda akan melihat mereka selalu mengikuti konvensi yang sama. http dari org.apache.http, Andengine adalah org.anddev.andengine, dll.
Eric
Apa aturan tentang karakter mana yang diperbolehkan untuk nama paket di Android? apakah hanya huruf bahasa Inggris, "." dan karakter "_" yang diizinkan?
pengembang android
Terima kasih semuanya atas komentar yang bermanfaat. Saya menghadapi masalah terkait: paket saya spectorskydi aplikasi calendardireferensikan di Device File Explorer as com.tmp.spectorsky.calendar. Saya tidak mengerti mengapa tmplevel muncul di sini?
Spectorsky
-1

Tetapi jika Aplikasi Android Anda hanya untuk tujuan pribadi atau dibuat oleh Anda sendiri, Anda dapat menggunakan:

me.app_name.app
ajdeguzman
sumber
10
Anda dapat mengatakan, bahwa pernyataan yang dibuat adalah murni pendapat Anda :)
Rahul Reddy 5'14
@RahulReddy mengapa downvoted, saya tidak mengerti. google tidak membatasi siapa pun untuk menggunakan com. atau org.! Anda dapat menggunakan apa pun yang Anda inginkan sebagai nama paket
batmaci
1
@ batmaci Saya percaya ini telah diturunkan karena itu menyesatkan orang untuk menggunakan nama paket yang sewenang-wenang. Meskipun ini secara teknis mungkin dan Google tidak memverifikasi jika domain itu milik Anda, itu akan menyebabkan polusi namespace dan karenanya dianggap praktik yang buruk.
Oliver Hausler
3
@ OliverHausler apa yang Anda maksud dengan polusi namespace? dimana dan bagaimana mengapa ini sangat penting? Saya hanya tahu bahwa jika Anda memiliki situs web dan Anda ingin melakukan deeplinking ke aplikasi Anda, itu membuat segalanya lebih mudah tetapi bahkan tanpa Anda masih dapat dengan mudah melakukan deeplink. jawaban di atas tidak satupun dari mereka menjelaskan mengapa tetapi mereka hanya mengulangi apa yang dikatakan google kepada mereka.
batmaci
1
@batmaci Bayangkan situasi ini: Dev X membuat aplikasi (dengan nama yang tidak kreatif) dan di dalamnya "me.app_name.services.MyService". Dev Y, yang kebetulan memiliki nama panggilan yang sama dengan dev X (sisisian diambil dari saya di banyak tempat misalnya), membuat aplikasi, nama juga tidak kreatif, sama dengan nama aplikasi Dev Xs. Dev Y membuat "me.app_name.services.MyService" untuk aplikasi-nya. Pengguna memasang kedua aplikasi, salah satunya mencoba memulai layanannya dengan nama - layanan mana yang dimulai? Tampaknya tidak mungkin, tetapi pertimbangkan jumlah aplikasi android di luar sana. Menggunakan email Anda dalam nama paket menghilangkan kemungkinan ini.
sisisian