AndroidManifest.xml中有一个package属性
build.gradle中defaultConfig下有一个applicationId
这两者有什么区别呢?
applicationId
Android应用的唯一标识,在Android设备和应用市场中所有的应用程序的applicationId都是唯一的,要对一个应用进行更新,必须保证applicationId的值相同,否则就认为是不同的应用
配置applicationId
可以用作同一工程发布略有差异的不同apk,比如收费版和免费版、代码相同标示不同的渠道包等
一般配置
android {
......
defaultConfig {
applicationId "com.xx.application"
......
}
}
设置不同的applicationId配置
android {
......
productFlavors {
xiaomi{
applicationId = "com.xx.xiaomi"
}
baidu {
applicationId = "com.xx.baidu"
}
}
buildTypes {
......
debug {
applicationIdSuffix ".debug"
}
}
}
在创建新项目时applilcationId
和packageName
是默认相同的,即与项目结构中的包名相同,在项目创建完毕后两者的修改互不影响
如果没有在gradle中设置applicationId
的值,则项目默认读取packageName
作为applicationId
的值
可在AndroidManifest.xml中使用${applicationId}
引用applicationId
在代码中可以通过getPackageName()
获取applicationId,获取的是build.gradle里的applicationId
packageName
packageName可理解为项目代码和资源的路径,有两个作用
- 它被用来命名你的资源类的包(以及解析任何相关的Activity的类名)。在上面的示例中,生成的 R 类将会是com.xx.popupwindow.R,因此如果其他包里面的代码需要引用这些资源,就需要导入com.xx.popupwindow.R
- Manifest清单中声明(如类的包路径和packageName相同时,activity的name缩写为”.xxxActivity“)使用
可在AndroidManifest.xml中使用${packageName}
引用packageName
用变量代替包名
当引用三方平台的时候,需要在AndroidManifest多处配置当前应用的包名,如果想要更换包名,就需要在对应的地方作出相关修改,如果频繁修改比较麻烦,此时我们就可以通过 build.gradle 中的 manifestPlaceholders 配置,在 Androidmanifest 中通过相关变量作占位${applicationId}
代表当前包名
重新编译后可在输出目录直接查看AndroidManifest里面的相关值