Android - แบบแผนชื่อแพ็คเกจ


205

สำหรับตัวอย่าง "Hello World" ในandroid.comชื่อแพ็กเกจคือ
"package com.example.helloandroid;"

มีแนวทาง / มาตรฐานในการตั้งชื่อแพ็คเกจนี้หรือไม่? (การอ้างอิงจะดี)

คำตอบ:


230

Android ปฏิบัติตามข้อกำหนดจาวาแพคเกจปกติและนี่คือตัวอย่างข้อความที่สำคัญในการอ่าน

เหตุผลที่มีมันในลำดับย้อนกลับคือการทำกับเค้าโครงบนสื่อเก็บข้อมูล หากคุณพิจารณาแต่ละจุด ('.') ในชื่อแอปพลิเคชันเป็นตัวคั่นพา ธ แอปพลิเคชันทั้งหมดจากผู้เผยแพร่โฆษณาจะอยู่ด้วยกันในลำดับชั้นของพา ธ ตัวอย่างเช่นแพ็คเกจจาก Adobe จะอยู่ในรูปแบบ:

com.adobe.reader (Adobe Reader)

com.adobe.photoshop (Adobe Photoshop)

com.adobe.ideas (แนวคิดของ Adobe)

[โปรดทราบว่านี่เป็นเพียงภาพประกอบและสิ่งเหล่านี้อาจไม่ใช่ชื่อแพ็คเกจที่แน่นอน]

สิ่งเหล่านี้สามารถถูกแมปภายใน (ตามลำดับ) ไปที่:

co.th / Adobe / อ่าน

co.th / Adobe / Photoshop

co.th / Adobe / ความคิด

แนวคิดนี้มาจาก Package Naming Conventions ใน 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 (เมืองหลวงฉัน) ใช้ตัวพิมพ์ใหญ่ในชื่อแพคเกจเป็นความคิดที่ไม่ดี (บริการ Google บางอย่างจะไม่ทำงานสำหรับคุณ)
Amir Uval

4
ขอโทษ. หลังจากเห็นคำตอบของคุณฉันมองเข้าไปใกล้ ๆ และเบราว์เซอร์ของฉันเชื่อมต่อ i เข้ากับจุดของมันทำให้มันดูเหมือนเป็นเมืองหลวง I. น่าอาย: S
Amir Uval

7
@androiddeveloper - ตัวอักษรและตัวเลขทั้งหมด '.' และอนุญาตให้ '_' อย่างไรก็ตามชื่อแพ็กเกจ (หรือชื่อ "แพ็คเกจย่อย" สำหรับเรื่องนั้นเช่น "reader" ใน com.adobe.reader) ไม่สามารถขึ้นต้นด้วยตัวเลขหรือไม่สามารถเป็นคำหลักที่สงวนไว้ของ Java (เช่น "สำหรับ" หรือ "ในขณะที่ ") เพื่อต่อสู้กับข้อ จำกัด เหล่านี้คุณจะต้องเริ่มต้นชื่อแพคเกจด้วยชื่อ '_' ดังนั้น 3.cookies.for.you.com จะแปลเป็น com.you._for.cookies._3) ดูเอกสาร Oracle ที่เกี่ยวข้องสำหรับรายละเอียด
Jimmy Huch

1
"com.appname" จะเป็นชื่อแพ็คเกจที่ถูกต้องใน Android หรือไม่?
Mark Buikema

65

ชื่อแพ็คเกจใช้สำหรับระบุตัวตนที่ไม่ซ้ำสำหรับแอปพลิเคชันของคุณ
Android ใช้ชื่อแพ็กเกจเพื่อพิจารณาว่าติดตั้งแอปพลิเคชันหรือไม่
การตั้งชื่อทั่วไปคือ:

com.companyname.applicationname

เช่น:

com.android.Camera


2
com สามารถเปลี่ยนแปลงได้หากชื่อโดเมนของ บริษัท / องค์กรนั้นแตกต่างกัน กล่าวคือ org.wikipedia.wikipediaapp
Niels Abildgaard

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 ช่วยให้มั่นใจได้ว่ารหัสแอปพลิเคชันไม่ซ้ำกัน ไม่สแกนแพ็กเกจเพื่อหาข้อขัดแย้ง ดังนั้นจึงเป็นไปได้ว่าสอง intents / services มีชื่อมาตรฐานเดียวกันหากนักพัฒนาไม่ปฏิบัติตามหลักการตั้งชื่อนี้ โปรดดู: 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 Launcher (หน้าจอหลัก) คือ Com.Google.android.launcher


2

โดยทั่วไป 2 คำแรก "แพ็คเกจ" คือที่อยู่เว็บของคุณในทางกลับกัน (คุณมี 3 ที่นี่เป็นแบบแผนถ้าคุณมีโดเมนย่อย)

ดังนั้นสิ่งที่สแต็คโอเวอร์โฟลว์สร้างน่าจะอยู่ในแพ็คเกจ com.stackoverflow.whething.customname

สิ่งที่ผลิต asp.net อาจเรียกว่า net.asp.whething.customname.omg.srsly

บางอย่างจาก mysubdomain.toplevel.com จะเป็น com.toplevel.mysubdomain.whever

นอกเหนือจากการประชุมที่เรียบง่ายท้องฟ้าก็มีขีด จำกัด นี่คือการประชุม linux แบบเก่าสำหรับบางสิ่งที่ฉันจำไม่ได้ว่า ...


ขอบคุณสำหรับคำแนะนำ แต่มีการอ้างอิงจากเว็บไซต์ Android อย่างเป็นทางการหรือไม่?
ชาร์ล Yeung

สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้คือการประกาศแจ้งที่นี่: developer.android.com/guide/topics/manifest/ ...... แต่ถ้าคุณทำทุกอย่างที่มีอยู่ในไลบรารีแพ็กเกจคุณจะเห็นว่าพวกเขาทำตามแบบแผนเดิมเสมอ http จาก org.apache.http, Andengine เป็น org.anddev.andengine ฯลฯ เป็นต้น
เอริค

กฎใดบ้างที่อนุญาตให้ใช้กับชื่อแพคเกจบน Android? มันเป็นแค่ตัวอักษรภาษาอังกฤษ "." และอักขระ "_" ที่ได้รับอนุญาต?
นักพัฒนา android

ขอบคุณทุกคนสำหรับความคิดเห็นที่เป็นประโยชน์ ฉันหันหน้าไปทางที่มีปัญหาที่เกี่ยวข้อง: แพคเกจของฉันspectorskyในการประยุกต์ใช้calendarเป็นอุปกรณ์ใน reffered File Explorer com.tmp.spectorsky.calendarเป็น ฉันไม่เข้าใจว่าทำไมtmpระดับปรากฏที่นี่
Spectorsky

-1

แต่ถ้าแอพ Android ของคุณมีไว้เพื่อวัตถุประสงค์ส่วนตัวหรือสร้างโดยคุณคนเดียวคุณสามารถใช้:

me.app_name.app

10
คุณสามารถพูดได้ว่าคำสั่งที่ทำให้เป็นอย่างหมดจดความคิดเห็น you'r :)
ราหุลเรดดี้

@RahulReddy ทำไม downvoted นั้นฉันไม่เข้าใจ google ไม่ จำกัด ใครให้ใช้คอม หรือ org.! คุณสามารถใช้สิ่งที่คุณต้องการเป็นชื่อ
แพคเกจ

1
@ batmaci ฉันเชื่อว่าสิ่งนี้ได้รับการลดระดับลงเนื่องจากทำให้ผู้อื่นใช้ชื่อแพ็คเกจโดยพลการ แม้ว่าสิ่งนี้อาจเป็นไปได้ในทางเทคนิคและ Google ไม่ได้ตรวจสอบว่าโดเมนเป็นของคุณหรือไม่ แต่จะนำไปสู่มลภาวะในเนมสเปซและดังนั้นจึงควรถือว่าการปฏิบัติที่ไม่ดี
Oliver Hausler

3
@OliverHausler คุณหมายถึงมลพิษจาก namespace อย่างไร ที่ไหนและอย่างไร ทำไมเรื่องนี้ถึงสำคัญนัก ฉันรู้แค่ว่าถ้าคุณมีเว็บไซต์และคุณต้องการทำ dplinking ให้กับแอพของคุณมันจะทำให้สิ่งต่าง ๆ ง่ายขึ้น แต่คุณก็ยังสามารถทำได้อย่างง่ายดาย คำตอบข้างต้นไม่มีใครอธิบายได้ว่าทำไม แต่พวกเขาเพียงทำซ้ำสิ่งที่ google บอกพวกเขา
batmaci

1
@batmaci ลองนึกภาพสถานการณ์นี้: Dev X สร้างแอป (ที่ไม่มีชื่อโฆษณา) และในนั้น "me.app_name.services.MyService" Dev Y ผู้ที่มีชื่อเล่นเดียวกับ dev X (เช่น Sisisisi ถูกนำมาจากฉันในหลาย ๆ ที่) สร้างแอปชื่อไม่สร้างสรรค์เช่นเดียวกับชื่อแอป Dev X Dev Y สร้าง "me.app_name.services.MyService" สำหรับแอปของเขา ผู้ใช้ติดตั้งแอพทั้งสองตัวหนึ่งในนั้นพยายามเริ่มบริการโดยใช้ชื่อ - บริการใดเริ่มต้นบ้าง ดูเหมือนไม่น่าเป็นไปได้ แต่ให้พิจารณาจำนวนแอพ Android ที่นั่น การใช้อีเมลของคุณในชื่อแพคเกจกำจัดความเป็นไปได้นี้
sisisisi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.