Android-패키지 이름 규칙


205

android.com 의 "Hello World"예제에서 패키지 이름은
"package com.example.helloandroid;"

이 패키지의 이름을 지정할 지침 / 표준이 있습니까? (참조가 좋을 것입니다)

답변:


230

안드로이드는 일반적인 자바 패키지 규칙을 따르고 여기에 읽을 중요한 텍스트 조각이 있습니다 (이것은 안드로이드에서 개발하는 동안 XML 파일의 광범위한 사용과 관련하여 중요합니다).

역순으로 저장하는 이유는 저장 매체의 레이아웃과 관련이 있기 때문입니다. 응용 프로그램 이름의 각 마침표 ( '.')를 경로 구분 기호로 간주하면 게시자의 모든 응용 프로그램이 경로 계층 구조에 함께 배치됩니다. 예를 들어 Adobe 패키지는 다음과 같은 형식입니다.

com.adobe.reader (Adobe Reader)

com.adobe.photoshop (Adobe Photoshop)

com.adobe.ideas (Adobe Ideas)

[이것은 단지 예시 일 뿐이며 정확한 패키지 이름이 아닐 수도 있습니다.]

이들은 내부적으로 (각각) 다음에 매핑 될 수 있습니다.

com / adobe / reader

com / adobe / photoshop

com / adobe / ideas

이 개념은 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
여기에 안드로이드 사이트에서 (짧은) 참조입니다 -보고 "패키지 이름"에서 단락이 developer.android.com/resources/tutorials/hello-world.html
보얀 Komazec

4
당신은 당신의 대답에 사람들을 오도 할 수있는 실수를했습니다. com.adobe.ideas이며 com.adobe.Ideas (자본 I)가 아닙니다. 패키지 이름에 대문자를 사용하는 것은 좋은 생각이 아닙니다 (일부 Google 서비스는 작동하지 않습니다)
Amir Uval

4
미안해 귀하의 답변을 본 후 자세히 살펴 보았고 브라우저가 i를 점과 연결하여 대문자 I처럼 보이게했습니다. 얼마나 당황
스러운지

7
@androiddeveloper-모든 영숫자 문자 '.' '_'이 허용됩니다. 그러나 패키지 이름 (또는 com.adobe.reader의 "reader"와 같은 문제의 "하위 패키지"이름)은 숫자로 시작할 수 없거나 "for"또는 "while과 같은 Java 예약 키워드 일 수 없습니다. "). 이러한 제한 사항을 해결하려면 패키지 이름을 '_'로 시작하면 3.cookies.for.you.com은 com.you._for.cookies._3으로 변환됩니다. 자세한 내용은 관련 Oracle 설명서 를 참조하십시오.
Jimmy Huch

1
"com.appname"이 안드로이드에서 유효한 패키지 이름입니까?
Mark Buikema

65

패키지 이름은 응용 프로그램의 고유 식별에 사용됩니다.
Android는 패키지 이름을 사용하여 애플리케이션의 설치 여부를 판별합니다.
일반적인 이름은 다음과 같습니다.

com.companyname.applicationname

예 :

com.android. 카메라


2
com은 회사 / 조직의 도메인 이름이 다른 경우 달라질 수 있습니다. 즉. org.wikipedia.wikipediaapp
Niels Abildgaard

6
누군가 내 웹 사이트 이름을 Android 앱의 패키지 이름으로 사용하면 어떻게 되나요? 상점에서이 앱을 가져갈 수 있습니까?
Mohammad AlBanna

38

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

회사는 역 인터넷 도메인 이름을 사용하여 패키지 이름을 시작합니다 (예 : example.com의 프로그래머가 만든 mypackage 패키지의 경우 com.example.mypackage).

단일 회사 내에서 발생하는 이름 충돌은 해당 회사 내에서 규칙에 따라 처리해야합니다 (예 : 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에서만 설치하는 경우 이러한 충돌이 발생하지
않아야합니다.

Google Play는 애플리케이션 ID가 고유한지 확인합니다. 충돌이 있는지 패키지를 스캔하지 않습니다. 따라서 개발자가이 명명 규칙을 따르지 않는 경우 동일한 표준 이름을 가진 두 개의 의도 / 서비스가있을 수 있습니다. 참조하십시오 : developer.android.com/studio/build/application-id.html
JCasso

도메인 이름을 변경하면 어떻게됩니까? 또한 전자 메일 제안은 약간 위험 해 보입니다. 전자 메일이 foo@outlook.com이고 Microsoft가 Outlook 용 foo 패키지를 만들려면 어떻게해야합니까? 둘 다 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

예를 들어 그는 안드로이드 런처 (홈 화면)는 Com.Google.android.launcher입니다.


2

일반적으로 처음 2 개의 패키지 "단어"는 웹 주소가 반대로되어 있습니다. 하위 도메인이있는 경우 여기에 규칙으로 3이 있습니다.

따라서 stackoverflow가 생성하는 것은 com.stackoverflow.whatever.customname 패키지에있을 수 있습니다.

asp.net이 생성하는 것을 net.asp.whatever.customname.omg.srsly라고합니다.

mysubdomain.toplevel.com의 항목은 com.toplevel.mysubdomain.whatever입니다.

그 단순한 관습을 넘어 서면 하늘이 한계입니다. 이것은 내가 정확하게 기억할 수없는 것에 대한 오래된 리눅스 협약입니다 ...


제안 해 주셔서 감사합니다. 그러나 공식 안드로이드 사이트에서 어떤 언급이 있습니까?
Charles Yeung

내가 찾을 수있는 가장 가까운 것은 developer.android.com/guide/topics/manifest/입니다. 그러나 패키지 라이브러리로 존재하는 모든 것을 가져 가면 항상 동일한 규칙을 따릅니다. http는 org.apache.http, Andengine은 org.anddev.andengine 등입니다.
Eric

Android에서 패키지 이름에 허용되는 문자에 대한 규칙은 무엇입니까? 영어 문자 일뿐입니다. 허용되는 "_"문자?
안드로이드 개발자

유용한 의견을 보내 주셔서 감사합니다. 관련 문제가 있습니다. spectorsky응용 프로그램의 패키지 calendar는 Device File Explorer에서로 나타납니다 com.tmp.spectorsky.calendar. 왜 tmp레벨이 여기에 나타나는지 이해할 수 없습니까?
Spectorsky

-1

그러나 Android 앱이 개인적인 목적으로 만 사용되거나 본인이 직접 만든 경우 다음을 사용할 수 있습니다.

me.app_name.app

10
당신은 진술이 순전히 당신의 의견이라고 말할 수 있습니다 :)
Rahul Reddy

@RahulReddy는 왜 그렇게 하향 조정되어 있는지 이해하지 못합니다. Google은 누구든지 com을 사용하도록 제한하지 않습니다. 또는 조직.! 원하는 모든 것을 packagename으로 사용할 수 있습니다
batmaci

1
@ batmaci 나는 사람들이 임의의 패키지 이름을 사용하도록 잘못 안내했기 때문에 이것이 다운 투표되었다고 생각합니다. 이것이 기술적으로 가능하고 Google이 도메인이 본인인지 확인하지는 않지만 네임 스페이스 오염으로 이어질 수 있으므로 나쁜 습관으로 간주해야합니다.
Oliver Hausler

3
@OliverHausler 네임 스페이스 오염이란 무엇입니까? 어디서 어떻게? 왜 이것이 그렇게 중요한가? 나는 당신이 웹 사이트를 가지고 있고 앱에 딥 링크를하고 싶다면, 쉽게 할 수는 있지만 여전히 쉽게 딥 링크 할 수는 없습니다. 위의 답변은 그중 아무도 설명하지 않지만 Google이 말한 것을 반복합니다.
batmaci

1
@batmaci이 상황을 상상해보십시오. Dev X는 (창의적 이름이 아닌) 앱을 만들고 "me.app_name.services.MyService"에 앱을 만듭니다. dev X와 같은 닉네임을 가진 Dev Y는 (예를 들어, 여러 장소에서 나에게서 가져 왔음), Dev Xs 앱 이름과 같은 이름도 창의적이지 않은 앱을 만듭니다. 개발자 Y는 자신의 앱에 대해 "me.app_name.services.MyService"를 만듭니다. 사용자가 두 앱을 모두 설치하면 그 중 하나가 이름으로 서비스를 시작하려고합니다. 어떤 서비스가 시작 되었습니까? 그럴 것 같지 않지만 거기에있는 안드로이드 앱의 수를 고려하십시오. 패키지 이름으로 이메일을 사용하면 이러한 가능성이 사라집니다.
sisisisi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.