所有Android应用程序多都有一个packageName(以下称:包名),在eclipse写Android代码的时代,包名被定义在AndroidManifest.xml文件中。包名是设备上这个应用程序的唯一标识。当包名改变也就是意味着同未改之前的应用是2个不同的应用。
在Gradle构建时,可以构建多个不同版本的应用程序(配置build.gradle文件),不同版本可以同时安装在同一台设备上,并且这些版本使用的是同一个包名,能这样的原因是:google解耦了包名称的用法:
- 在生成的.apk 的manifest 中,并且用于在你的设备和 Google Play 商店来标识你的应用的包,叫做“ApplicationId”
- 用于在源代码中来引用您的R类的,并且是解析任何相关的Activity/Service 注册的包,继续被称为“package”
所以就是如果你在用gradle构建Android工程时,packageName同Application不一定是相同的。
注意:
- 出于兼容性原因,如果您没有在您的 build.gradle 文件中定义 applicationId,这个applicationId 将默认为 AndroidManifest.xml 中所指定的相同的值。在这种情况下,这两个显然未解耦,并且如果你试图重构您的代码也将会意外地更改您的应用程序的 id !在 Android Studio 中,新建的项目始终会指定这两个值。
- 包名称必须始终在默认 AndroidManifest.xml 文件中指定。如果您有多个manifest (例如一个 flavor 的特定的manifest或一个 buildType 的特定的manifest),该包名是可选的,但如果它被指定了,它必须和主manifest中指定的包完全相同。
参考:http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename
网友评论