Android - Quy ước tên gói


205

Đối với ví dụ "Hello World" trong android.com , tên gói là
"package com.example.helloandroid;"

Có bất kỳ hướng dẫn / tiêu chuẩn để đặt tên cho gói này? (tài liệu tham khảo sẽ tốt đẹp)

Câu trả lời:


229

Android tuân theo các quy ước gói java thông thường cộng với đây là một đoạn văn bản quan trọng để đọc (điều này rất quan trọng đối với việc sử dụng rộng rãi các tệp xml trong khi phát triển trên Android).

Lý do để có nó theo thứ tự ngược lại là để làm với bố cục trên phương tiện lưu trữ. Nếu bạn coi mỗi khoảng thời gian ('.') Trong tên ứng dụng là dấu phân cách đường dẫn, tất cả các ứng dụng từ nhà xuất bản sẽ ngồi cùng nhau trong phân cấp đường dẫn. Vì vậy, ví dụ, các gói từ Adobe sẽ có dạng:

com.adobe.reader (Adobe Reader)

com.adobe.photoshop (Adobe Photoshop)

com.adobe.ideas (Ý tưởng Adobe)

[Lưu ý rằng đây chỉ là một minh họa và đây có thể không phải là tên gói chính xác.]

Chúng có thể được ánh xạ bên trong (tương ứng) thành:

com / adobe / người đọc

com / adobe / photoshop

com / adobe / ý tưởng

Khái niệm này xuất phát từ các Quy ước đặt tên gói trong Java, thông tin thêm về nó có thể được đọc ở đây: *

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

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


2
đây là một tài liệu tham khảo (ngắn gọn) từ trang web Android - hãy xem đoạn "Tên gói" tại developer.android.com/resource/tutorials/hello-world.html
Bojan Komazec

4
Bạn có một sai lầm trong câu trả lời của bạn có thể đánh lừa mọi người. đó là com.adobe.ideas chứ không phải com.adobe.Ideas (thủ đô I). sử dụng chữ hoa trong tên gói là một ý tưởng tồi (một số dịch vụ google sẽ không hiệu quả với bạn)
Amir Uval

4
Xin lỗi bạn. Sau khi thấy câu trả lời của bạn, tôi đã xem xét kỹ hơn và trình duyệt của tôi đã kết nối i với dấu chấm của nó, làm cho nó trông giống như một thủ đô I. Thật đáng xấu hổ: S
Amir Uval

7
@androiddeveloper - Tất cả các ký tự chữ và số, '.' và '_' được cho phép. Tuy nhiên, tên gói (hoặc tên "gói phụ" cho vấn đề đó, như "reader" trong com.adobe.reader) không thể bắt đầu bằng một số hoặc không thể là từ khóa dành riêng java (như "for" hoặc "while "). Để chống lại những hạn chế này, bạn sẽ bắt đầu tên gói bằng '_' hàng đầu vì vậy 3.cookies.for.you.com sẽ dịch sang com.you._for.cookies._3). Xem tài liệu liên quan của Oracle để biết chi tiết.
Jimmy Huch

1
"Com.appname" có phải là tên gói hợp lệ trong Android không?
Đánh dấu Buikema

65

Tên gói được sử dụng để nhận dạng duy nhất cho ứng dụng của bạn.
Android sử dụng tên gói để xác định xem ứng dụng đã được cài đặt hay chưa.
Cách đặt tên chung là:

com.companyname.applicationname

ví dụ:

com.android.Camera


2
com có ​​thể khác nhau, nếu tên miền của công ty / tổ chức là khác nhau. I E. org.wikipedia.wikipediaapp
Niels Abildgaard

6
Điều gì xảy ra nếu ai đó lấy tên trang web của tôi làm tên gói cho ứng dụng Android của mình? Tôi có thể gỡ ứng dụng này xuống từ cửa hàng không?
Mohammad AlBanna

38

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

Các công ty sử dụng tên miền Internet đảo ngược của họ để bắt đầu tên gói của họ Ví dụ, com.example.mypackage cho gói có tên mypackage được tạo bởi một lập trình viên tại example.com.

Xung đột tên xảy ra trong một công ty duy nhất cần được xử lý theo quy ước trong công ty đó, có thể bằng cách bao gồm tên vùng hoặc tên dự án sau tên công ty (ví dụ: com.example.region.mypackage).

Nếu bạn có một tên miền công ty www.example.com

Sau đó, bạn nên sử dụng:

com.example.region.projectname

Nếu bạn sở hữu một tên miền như example.co.uk thì nên:

uk.co.example.region.projectname

Nếu bạn không sở hữu một tên miền, thì bạn nên sử dụng địa chỉ email của mình:

đối với name@example.com thì phải là:

com.example.name.region.projectname


bạn có thể giải thích tại sao tôi nên sử dụng nó? Những lợi ích nào tôi có được khi sử dụng tên miền công ty của mình dưới dạng packagename?
batmaci

Vui lòng xem câu hỏi StackOverflow này làm ví dụ: stackoverflow.com/questions/8381324/NH
JCasso

ok tôi hiểu điều này để giữ cho tên gói duy nhất nhưng câu hỏi của tôi là khi chúng tôi tải lên google play. Google play có đảm bảo rằng tên gói là duy nhất trong cửa hàng trước khi trực tuyến không? Vì vậy, nếu chúng tôi chỉ cài đặt từ google play, chúng tôi không nên có xung đột này
batmaci

Google play đảm bảo rằng id ứng dụng là duy nhất. Nó không quét các gói cho xung đột. Vì vậy, có thể hai ý định / dịch vụ có cùng tên chính tắc nếu nhà phát triển không tuân theo quy ước đặt tên này. Vui lòng xem: developer.android.com/studio/build/application-id.html
JCasso

Điều gì xảy ra nếu bạn thay đổi tên miền của bạn? Ngoài ra, đề xuất cho e-mail có vẻ hơi nguy hiểm - nếu e-mail của tôi là foo@outlook.com và Microsoft muốn tạo gói foo cho Outlook thì sao? Cả hai sẽ có mặt tại com.outlook.foo, phải không?
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

Ví dụ: trình khởi chạy Android của anh ấy (màn hình chính) là Com.Google.android.launcher


2

Nói chung, 2 từ "gói" đầu tiên là địa chỉ web của bạn ngược lại. (Bạn sẽ có 3 ở đây làm quy ước, nếu bạn có một tên miền phụ.)

Vì vậy, một cái gì đó stackoverflow tạo ra có thể sẽ có trong gói com.stackoverflow.whthing.customname

một cái gì đó asp.net tạo ra có thể được gọi là net.asp.whthing.customname.omg.srsly

một cái gì đó từ mysubdomain.toplevel.com sẽ là com.toplevel.mysubdomain.whthing

Ngoài quy ước đơn giản đó, bầu trời là giới hạn. Đây là một quy ước linux cũ cho một cái gì đó mà tôi không thể nhớ chính xác ...


Cám ơn vì sự gợi ý. Nhưng, có bất kỳ tài liệu tham khảo từ trang web chính thức của Android?
Charles Yeung

Điều gần nhất mà tôi có thể tìm thấy là một sự phô trương ở đây: developer.android.com/guide/topics/manifest/ mẹo Nhưng nếu bạn lấy mọi thứ tồn tại dưới dạng thư viện gói, bạn sẽ thấy chúng luôn tuân theo cùng một quy ước. http là từ org.apache.http, Andengine là org.anddev.andengine, v.v.
Eric

Các quy tắc về các ký tự được phép cho tên gói trên Android là gì? nó chỉ là chữ cái tiếng Anh, "." và các ký tự "_" được phép?
nhà phát triển Android

Cảm ơn mọi người vì những bình luận hữu ích. Tôi đang đối mặt với vấn đề liên quan: gói của tôi spectorskytrong ứng dụng calendarđược giới thiệu trong Device File Explorer là com.tmp.spectorsky.calendar. Tôi không thể hiểu tại sao tmpcấp độ xuất hiện ở đây?
Spectorsky

-1

Nhưng nếu Ứng dụng Android của bạn chỉ dành cho mục đích cá nhân hoặc do bạn tạo ra, bạn có thể sử dụng:

me.app_name.app

10
Bạn có thể nói rằng tuyên bố đưa ra hoàn toàn là ý kiến ​​của bạn :)
Rahul Reddy

@RahulReddy tại sao điều đó bị hạ cấp, tôi không hiểu. google không hạn chế bất cứ ai sử dụng com. hoặc cực đại! bạn có thể sử dụng bất cứ thứ gì bạn muốn như một packagename
batmaci

1
@batmaci Tôi tin rằng điều này đã bị hạ cấp bởi vì nó khiến mọi người sử dụng sai tên gói tùy ý. Mặc dù điều này về mặt kỹ thuật có thể khả thi và Google không xác minh xem tên miền có phải của bạn hay không, điều đó sẽ dẫn đến ô nhiễm không gian tên và do đó nên được coi là thông lệ xấu.
Oliver Hausler

3
@OliverHausler bạn có ý nghĩa gì khi ô nhiễm không gian tên? ở đâu và như thế nào? Tại sao điều này rất quan trọng? Tôi chỉ biết rằng nếu bạn có một trang web và bạn muốn liên kết sâu với ứng dụng của mình, nó sẽ giúp mọi việc dễ dàng hơn nhưng ngay cả khi không có bạn vẫn có thể dễ dàng liên kết sâu. câu trả lời ở trên không ai trong số họ giải thích tại sao nhưng họ chỉ lặp lại những gì google nói với họ.
batmaci

1
@batmaci Hãy tưởng tượng tình huống này: Dev X tạo ứng dụng (với tên không sáng tạo) và trong đó "me.app_name.service.MyService". Dev Y, người có cùng biệt danh với dev X (sisisisi được lấy từ tôi ở nhiều nơi chẳng hạn), tạo ra một ứng dụng, tên cũng không sáng tạo, giống như tên ứng dụng Dev Xs. Dev Y tạo ra "me.app_name.service.MyService" cho ứng dụng của mình. Người dùng cài đặt cả hai ứng dụng, một trong số họ cố gắng bắt đầu dịch vụ của mình theo tên - dịch vụ nào được bắt đầu? Có vẻ như không thể, nhưng hãy xem xét số lượng ứng dụng Android ngoài kia. Sử dụng email của bạn trong tên gói sẽ loại bỏ khả năng này.
sisisisi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.