applicationId
:在Android系统中应用的applicationId
作为应用的唯一标识,就像人的身份证号一样,在一个Android设备中所有的应用程序的applicationId
都是唯一的。
eclipse版本
package name
:在用Eclipse构建的Android项目中,使用包名(Package Name)作为应用的唯一标识(applicationId
)。可以说在Eclipse下applicationId
=package name
。所以Eclipse构建的Android项目包名必须唯一,一个包名代表一个应用,不允许两个应用使用同样的包名。包名主要用于系统识别应用,几乎不会被最终用户看到。
androidStudo版本
在用Android studio构建的Android项目中可以为应用配置applicationId
·,配置的applicationId
可以不和package name
一样。由此可以看来用Android studio构建的Android项目package name
不一定是应用程序的标识。这一点很重要,开发者一定要记住。比如你在使用第三方SDK开发时,如百度地图,需要你来设置Android SDK安全码,在设置安全码时需要用到应用程序的包名,这个包名指的是applicationId
。
注意:识别.R跟Activity文件的路径还是packageName,这个是唯一的
解耦方案
application id
对应 apk 中 manifest 定义的应用包名,同时用于设备以及 Google Play 的应用唯一标识。package
用于在源码中引用 R 类以及解析注册相关的 activity/service,对应 Java 的包名概念。
我们在AndroidManifest.xml定义一个包名,这个是唯一的
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
我们在app.gradle
文件使用Gradle DSL 方法来为不同的 flavor 和 build type 定义不同的 applicationId:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18android{
···
productFlavors {
pro {
applicationId = "com.hammercui.app.pro"
}
free {
applicationId = "com.hammercui.app.free"
}
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
....
}