作者:mobiledu2502870133 | 来源:互联网 | 2023-05-20 19:34
我想以我公司的名义创建应用程序,Android Studio建议使用您的域名,例如:
域名:example.com
应用:myApp
给出com.example.myApp的包名
这一切都很好,但我的公司名称以数字开头,Android Studio告诉我我没有数字,例如:
com.1example.myApp
现在我可以尝试"oneexample",并希望oneexample.com中没有人开始开发Android应用程序,但考虑到有多少开发人员在他们的名字开头有一个数字,可能这已经出现过了.所以,如果我可以请问:
1)我应该如何解决命名我的包裹?
2)出于好奇,为什么不能以数字开头的包名?
谢谢堆!
昆汀.
1> unrulygnu..:
1)我应该如何解决命名我的包裹?
简答: Android包/子包名称必须以ASCII拉丁字母开头.由于在域名以数字开头的情况下,Google似乎没有关于包命名的指导,因此开发人员可以自行解决此问题.
以下是一些以数字开头的域名的真实示例,以及开发人员决定用于Android的包名称:
http://www.11bitstudios.com/
https://play.google.com/store/apps/details?id=com.elevenbitstudios.AnomalyWarzoneEarthHD
http://www.23snaps.com/
https://play.google.com/store/apps/details?id=com.snaps23.android
http://www.36you.com/
https://play.google.com/store/apps/details?id=com.thirtysixyougames.google.slotanddragons
进一步背景
Java允许包名称以ASCII拉丁字母或下划线字符开头.从命名包(Java™教程>学习Java语言>包):
在某些情况下,互联网域名可能不是有效的包名.如果域名包含连字符或其他特殊字符,如果包名称以数字或其他非法用作Java名称开头的字符开头,或者包名称包含保留的Java关键字,则会发生这种情况,例如"int".在这种情况下,建议的约定是添加下划线.
还显示了以下"合法化包名称"示例:
Domain Name Package Name Prefix
--------------------------- ---------------------------
hyphenated-name.example.org org.example.hyphenated_name
example.int int_.example
123name.example.com com.example._123name
但是,Android比Java更具限制性,并且包/子包名称可能不以下划线开头.从发行65570 - Android开源项目-事件跟踪-谷歌项目托管:
虽然Java允许以下划线开头的软件包名称,但Android应用程序软件包(具有其他限制)却不允许.当您尝试安装其包以_开头的应用程序时,设备PackageManager将拒绝它.出于这个原因,我们在创建应用程序时加强了Studio中的包名称验证,这样您就不会最终创建这些包,然后再受苦.
不幸的是,谷歌似乎没有任何关于合法化以Android数字开头的域名的包名称的约定.
2)出于好奇,为什么不能以数字开头的包名?
从第3章开始.词汇结构(Java®语言规范 - Java SE 7版):
标识符是无限长度的Java字母和Java数字序列,第一个必须是Java字母.
<剪断>
通过"Java字母"包括大写和小写ASCII拉丁字母 AZ(\ u0041-\u005a)和AZ(\ u0061-\u007a),并且,由于历史原因,ASCII下划线(_,或\ u005f)和美元符号($,或\ u0024).$字符只能用于机械生成的源代码,或者很少用于访问遗留系统上预先存在的名称.
同样,这在Android软件包名称中受到进一步限制.来自 | Android开发者:
package
应用程序的完整Java语言样式包名称.名称应该是唯一的.名称可能包含大写或小写字母('A'到'Z'),数字和下划线('_').但是,单个包名称部分可能只以字母开头.
感谢@Quentin,提供有关Android对Java的额外限制的信息.