对于android.com中的"hello world"示例,包名称为"package com.example.helloandroid;"
是否有任何准则/标准来命名这个包?(参考资料会很好)
Android遵循正常的Java包约定,这里是一个重要的文本片段(这对于在Android上开发XML文件的广泛使用很重要)。
相反顺序的原因是与存储介质上的布局有关。如果将应用程序名称中的每个句点(".")视为路径分隔符,则来自发布服务器的所有应用程序都将位于路径层次结构中。例如,来自Adobe的包的形式如下:
com.adobe.reader(Adobe阅读器)
com.adobe.photoshop(Adobe photoshop)
com.adobe.ideas(Adobe想法)
[请注意,这只是一个示例,可能不是确切的包名称。]
这些可以在内部(分别)映射到:
COM/Adobe/阅读器
com/adobe/photoshop网站
COM/Adobe/想法
这个概念来自Java中的包命名约定,更多的是可以读取的。这里:*
http://en.wikipedia.org/wiki/java_package package_命名惯例
来源:http://www.quora.com/why-do-a-majority-of-android-package-names-begin-with-com
- 谢谢你的建议。但是,官方Android网站上有没有提到?
- 这里有一个来自Android网站的(简短)参考资料-请看developer.android.com/resources/tutorials/hello-world.html上的"包名称"段落。
- 你的回答有错误,可能会误导别人。它是com.adobe.ideas,而不是com.adobe.ideas(capital i)。在软件包名称中使用大写字母是个坏主意(有些Google服务不适合您)
- @是的,我知道包裹里不允许有大写字母。我不认为我在答案中犯了错误,因为我没有在任何包裹名称中使用大写字母:s
- 对不起,伙计。看到你的答案后,我仔细看了一眼,我的浏览器把i和它的圆点连接起来,使它看起来像一个大写字母i。多尴尬啊:s
- 需要注意的是,第一部分是公司的TLD。对于"de"和"org"TLD,其他有效的包名称可以是de.mysoft.fractions(来自链接的维基百科示例)或org.wikipedia.wikipediaapp。
- Android上允许包名使用哪些字符的规则是什么?是否只允许英文字母、"."和"u"字符?
- @androiddeveloper-允许所有字母数字字符,"."和"u"。但是,一个包名(或"子包")的名称,比如"COM.Adobe .Reader中的"Reader"),不能以数字开头,也不能是Java保留关键字(如"OFF"或"OFF")。为了克服这些限制,您将在包名称的开头加上一个前导的"uu3.cookies.for.you.com"将转换为com.you.u for.cookies.u 3)。有关详细信息,请参阅相关的Oracle文档。
- 在Android中,"com.appname"是有效的软件包名称吗?
- 是否有任何严格的规则提供了验证它的方法?
- 包名称没有限制,您可以随意调用它。我的包名目前没有"com."在它,但接受谷歌没有任何问题。
- 您是否预见到2部分包名称存在任何问题?例如,app.coinverse作为我的公司是app的名称。
- @阿达姆霍维茨,你不会有任何问题。它甚至几乎没有任何用途,但对于某些拆封目的,反向URL模式是有用的,他们说,尽管,你也可以在没有这个的情况下进行拆封。
包名称用于应用程序的唯一标识。Android使用包名称来确定应用程序是否已安装。一般命名为:
com.companyname.applicationname应用程序名
如:
com.android.camera.摄像头
- 如果公司/组织的域名不同,COM可能会有所不同。例如:org.wikipedia.wikipediapp
- 如果有人把我的网站名作为他的Android应用程序的包名怎么办?我可以从商店取下这个应用程序吗?
http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
Companies use their reversed Internet domain name to begin their
package names—for example, com.example.mypackage for a package named
mypackage created by a programmer at example.com.
Name collisions that occur within a single company need to be handled
by convention within that company, perhaps by including the region or
the project name after the company name (for example,
com.example.region.mypackage).
如果您有公司域名www.example.com
那么你应该使用:
com.example.region.projectname项目名称
如果您拥有像example.co.uk这样的域名,那么它应该是:
uk.co.example.region.projectname公司
如果您不拥有域,则应使用您的电子邮件地址:
对于[email protected],应该是:
com.example.name.region.projectname项目名称
- 你能解释一下我为什么要用它吗?使用公司域名作为软件包名有哪些好处?
- 请以stackoverflow问题为例:stackoverflow.com/questions/8381324/…
- 好吧,我理解这一点是为了保持包名的唯一性,但我的问题是当我们上传到Google Play时。google play在上线之前,是否不能确保包名在商店中是唯一的?所以如果我们只从Google Play安装,就不应该有这种冲突
- Google Play确保应用程序ID是唯一的。它不会扫描包中的冲突。因此,如果开发人员不遵循这种命名约定,两个意图/服务可能具有相同的规范名称。请参阅:developer.android.com/studio/build/application-id.html
1 2 3 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 |
例如,安卓发射器(主屏幕)是com.google.android.launcher网站
通常前两个包"words"是反向的网址。(如果你有一个子域,这里有3个作为约定。)
所以stackoverflow产生的东西可能在包com.stackoverflow.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上允许包名使用哪些字符的规则是什么?是否只允许英文字母、"."和"u"字符?
但是,如果您的Android应用程序仅用于个人目的或由您自己创建,您可以使用:
- 你可以说,所作的陈述纯粹是你的意见:)
- @拉胡尔雷迪,我不明白为什么投了反对票。谷歌并不限制任何人使用COM。或者org!你可以用你想要的任何东西作为包名。
- @我认为这已经被否决了,因为它误导了人们使用任意的软件包名称。尽管这在技术上是可能的,而且谷歌没有验证域名是否是你的,但它会导致名称空间污染,因此应该被视为不好的做法。
- @奥利弗豪斯勒,你说的名称空间污染是什么意思?哪里和怎样?为什么这么重要?我只知道,如果你有一个网站,你想做你的应用程序deeplink,它使事情更容易,但即使没有你仍然可以很容易deeplink。上面的答案没有一个解释为什么,但他们只是重复谷歌告诉他们的。
- @Batmaci想象一下这种情况:dev x创建了一个应用程序(有一个非创造性的名称),在它里面有"me.app_name.services.myservice"。Dev Y恰好有一个与Dev X相同的昵称(例如,Sisisisi是从我的多个地方获得的),它创建了一个应用程序,名称也不是创造性的,与Dev X-S应用程序名称相同。dev y y为他的应用程序创建了一个"me.app_name.services.myservice"。用户安装两个应用程序,其中一个尝试按名称启动其服务-哪个服务已启动?看起来不太可能,但是考虑一下Android应用程序的数量。在包名称中使用电子邮件可以消除这种可能性。
- @西西西,那是不可能的。当你上传一个新的软件包到Play Store时,Google会验证其唯一性。如果已经有一个带有"me.app_name.services.myservice"的包名,Google将不允许您上传它。而且,即使没有谷歌PlayStore,在你的Android设备上也不可能实现。不允许安装两个程序包名称相同的应用程序。
- @BatmaciGoogle验证了其独特性,可能还有他们不验证域名所有权的原因(我能想到很多)。尽管如此,还是应该遵循建议来防止使用其他人的领域。如果你使用我的域名,我会要求谷歌关闭你。可能不是你想要的。
- @奥利弗豪斯勒,你上传你的应用的那天,如果它是写在谷歌的政策,是的,你可以,但如果不是,不可能关闭你。因为域也可能改变所有者。如果你找到这项政策,请告诉我。我从没见过。