applicationId
理论上来讲applicationId是android设备以及google play所公认的唯一标示。
若未配置applicationId时,google play无法上线(据查)
配置applicationId可以用作同一工程发布略有差异的不同apk,比如收费版和免费版、代码相同标示不同的渠道包等
一般配置
android {
......
defaultConfig {
applicationId "sp.com.learncomposite"
......
}
}
设置不同的applicationId
配置
android {
......
productFlavors {
pro {
applicationId = "sp.com.learncomposite.pro"
}
free {
applicationId = "sp.com.learncomposite.free"
}
}
buildTypes {
......
debug {
applicationIdSuffix ".debug"
}
}
}
packageName
- 将仅被代码(如资源文件
R.java
)或Manifest
清单中声明(如类的包路径和packageName
相同时,activity
的name
缩写为”.xxxActivity
“)使用。
两者关系
- 当
applicationId
不存在时,applicationId
将默认为packageName
。 - 当
applicationId
存在时,packageName
仅有其本身的功能,而applicationId
将作为唯一标示。
在Manifest
中使用${applicationId}
如Provider在声明android:authorities(该值必须唯一)时,如前缀为写死的包名字符串,当出现需要同一工程分包、分渠道打包时,安装在同一android设备将导致 INSTALL FAILED CONFLICTING PROVIDER 的报错(使用adb安装会有提示),这时可以使用${applicationId},这将避免android:authorities值非唯一的问题。
也可以用在Manifest
中其他需要唯一的取值情况,这种使用方式很灵活。
<provider
android:name="xxxx.xxxx.xxx.xxxProvider"
android:authorities="${applicationId}.xxxx"
android:grantUriPermissions="true"
android:exported="false"/>
${applicationId}
也可以用在Manifest
中其他需要唯一的取值情况,这种使用方式很灵活。