Android - 包名称约定

Posted

技术标签:

【中文标题】Android - 包名称约定【英文标题】:Android - Package Name convention 【发布时间】:2011-09-10 13:27:37 【问题描述】:

对于android.com 中的“Hello World”示例,包名称为"package com.example.helloandroid;"

是否有任何指南/标准来命名这个包? (参考会很好)

【问题讨论】:

【参考方案1】:

Android 遵循正常的 java 包约定,而且这里有一个重要的要读取的文本 sn-p(这对于在 android 上开发时广泛使用 xml 文件很重要)。

倒序排列的原因与存储介质的布局有关。如果您将应用程序名称中的每个句点 ('.') 视为路径分隔符,则来自发布者的所有应用程序将一起位于路径层次结构中。 因此,例如,来自 Adob​​e 的软件包将采用以下形式:

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 中的 Package Naming Conventions,更多内容可以阅读 这里:*

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

【讨论】:

这是来自 Android 网站的(简短)参考 - 请查看 developer.android.com/resources/tutorials/hello-world.html 处的“包名称”段落 您的回答有误,可能会误导人们。它是 com.adobe.ideas,而不是 com.adobe.Ideas(大写字母 I)。在包名中使用大写字母是个坏主意(某些谷歌服务不适合你) 对不起,伙计。看到你的回答后,我仔细看了看,我的浏览器将 i 与它的点连接起来,使它看起来像一个大写的 I。多么尴尬:S @androiddeveloper - 所有字母数字字符,'.'并且允许使用“_”。但是,包名称(或“子包”名称,如 com.adobe.reader 中的“reader”)不能以数字开头,或者不能是 java 保留关键字(如“for”或“while ”)。为了克服这些限制,您可以以“_”开头的包名称开始,因此 3.cookies.for.you.com 将转换为 com.you._for.cookies._3)。详情见相关Oracle documentation。 “com.appname”会是 android 中的有效包名吗?【参考方案2】:

包名用于您的应用程序的唯一标识。 Android 使用包名来确定应用程序是否已安装。 一般命名为:

com.companyname.applicationname

例如:

com.android.Camera

【讨论】:

如果公司/组织的域名不同,com 可能会有所不同。 IE。 org.wikipedia.wikipediaapp 如果有人将我的网站名称作为他的 Android 应用程序的包名称怎么办?我可以从商店下架这个应用吗?【参考方案3】:

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

【讨论】:

你能解释一下我为什么要使用它吗?使用我的公司域名作为包名有什么好处? 请以 *** 问题为例:***.com/questions/8381324/… 好的,我理解这是为了保持包名称的唯一性,但我的问题是当我们上传到 google play 时。 google play在上线前不保证包名在商店里是唯一的吗?所以如果我们只从 google play 安装,我们不应该有这个冲突 Google play 确保应用程序 ID 是唯一的。它不会扫描包中的冲突。因此,如果开发人员不遵循此命名约定,则两个意图/服务可能具有相同的规范名称。请看:developer.android.com/studio/build/application-id.html 如果您更改域名会怎样?此外,关于电子邮件的建议似乎有点危险——如果我的电子邮件是 foo@outlook.com 并且 Microsoft 想要为 Outlook 创建一个 foo 包怎么办?两者都在 com.outlook.foo,对吧?【参考方案4】:
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 启动器(主屏幕)是 Com.Google.android.launcher

【讨论】:

【参考方案5】:

通常,前 2 个包“单词”是您的反向网址。 (如果您有一个子域,那么这里的约定是 3。)

所以 *** 产生的东西可能在包 com.***.whatever.customname 中

asp.net 产生的东西可能会被调用 net.asp.whatever.customname.omg.srsly

来自 mysubdomain.toplevel.com 的内容将是 com.toplevel.mysubdomain.whatever

超越这个简单的惯例,天空才是极限。这是一个旧的 linux 约定,我记不清了……

【讨论】:

感谢您的建议。但是,有来自 Android 官方网站的任何参考资料吗? 我能找到的最接近的东西是这里的简介:developer.android.com/guide/topics/manifest/… 但是如果你把所有存在的东西都当作包库,你会发现它们总是遵循相同的约定。 http来自org.apache.http,Andengine来自org.anddev.andengine等等。 Android 包名中允许使用哪些字符的规则是什么?它只是英文字母,“。”以及允许的“_”字符? 感谢大家提供帮助的 cmets。我面临着相关问题:我在应用程序calendar 中的包spectorsky 在设备文件资源管理器中被称为com.tmp.spectorsky.calendar。我不明白为什么tmp级别会出现在这里?【参考方案6】:

但如果您的 Android 应用仅用于个人目的或由您单独创建,您可以使用:

me.app_name.app

【讨论】:

您可以说,所发表的声明纯粹是您的意见:) @batmaci 我相信这已被否决,因为它误导人们使用任意包名称。尽管这在技术上是可行的,而且 Google 不会验证该域是否属于您,但它会导致命名空间污染,因此应该被视为不好的做法。 @OliverHausler 你说的命名空间污染是什么意思?在哪里以及如何?为什么这么重要?我只知道如果你有一个网站并且你想对你的应用进行深度链接,它会让事情变得更容易,但即使没有你仍然可以轻松地进行深度链接。以上答案都没有解释原因,但他们只是重复谷歌告诉他们的内容。 @batmaci 想象一下这种情况:Dev X 创建应用程序(使用非创意名称)并在其中创建“me.app_name.services.MyService”。开发者 Y 恰好与开发者 X 有相同的昵称(例如,sisisisi 在多个地方被我取走),创建了一个应用程序,名称也没有创意,与开发者 X-s 应用程序名称相同。 Dev Y 为他的应用程序创建了一个“me.app_name.services.MyService”。用户安装了这两个应用程序,其中一个尝试按名称启动其服务 - 启动了哪个服务?似乎不太可能,但请考虑那里的 android 应用程序的数量。在包名称中使用您的电子邮件可以消除这种可能性。 另外,.me 是一个有效的***域,因此注册了app_name.me 的开发人员会与您的个人命名空间发生冲突。

以上是关于Android - 包名称约定的主要内容,如果未能解决你的问题,请参考以下文章

更改 Cordova 项目 android 包名称

Google Maps Api在重命名包名称后无法识别包名称-Android

Python 包名称约定

Android更改包名称错误[重复]

Android 6.0:获取当前活动的包名称[重复]

从android中的应用程序名称获取包名称[重复]