0
点赞
收藏
分享

微信扫一扫

applicationId和packageName,以及在Manifest中使用${applicationId}写法


applicationId和packageName

1. IDE为Eclipse时

2. IDE为Android Studio时

  • 理论上来讲​​applicationId​​​是​​android​​​设备以及​​google play​​所公认的唯一标示。
  • 若未配置​​applicationId​​​时,​​google play​​无法上线(据查)
  • 配置​​applicationId​​​可以用作同一工程发布略有差异的不同​​apk​​,比如收费版和免费版、代码相同标示不同的渠道包等。
  • 配置方法(在​​app​​的​​build.gradle​​中):
  • 一般配置

android {
......
defaultConfig {
applicationId "sp.com.learncomposite"
......
}
}

  • 设置不同的​​applicationId​​配置 
    其中关于​​productFlavors​​的应用可以参考这篇文章很详细:链接,或者参考官方文档:​​链接1​​,​​链接2​​。

android {
......
productFlavors {
pro {
applicationId = "sp.com.learncomposite.pro"
}
free {
applicationId = "sp.com.learncomposite.free"
}
}

buildTypes {
......
debug {
applicationIdSuffix ".debug"
}
}
}

  • 当​​release​​打包时,在签名界面,可以选择你将要打出的包,也可以多选并同时打出: 
  • 当​​debug​​​调试时,可以再​​Android studio​​​左下角的​​Build Variants​​标签中选择当前调试的是哪个包: 

2.2.2 packageName

  • 将仅被代码(如资源文件​​R.java​​​)或​​Manifest​​​清单中声明(如类的包路径和​​packageName​​​相同时,​​activity​​​的​​name​​​缩写为”​​.xxxActivity​​“)使用。

2.2.3 两者纠缠的关系

  • 当​​applicationId​​​不存在时,​​applicationId​​​将默认为​​packageName​​。
  • 当​​applicationId​​​存在时,​​packageName​​​仅有其本身的功能,而​​applicationId​​将作为唯一标示。

3. 在Manifest中使用${applicationId}

  • 如​​Provider​​​在声明​​android:authorities​​​(该值必须唯一)时,如前缀为写死的包名字符串,当出现需要同一工程分包、分渠道打包时,安装在同一​​android​​​设备将导致 ​​INSTALL FAILED CONFLICTING PROVIDER​​​ 的报错(使用​​adb​​​安装会有提示),这时可以使用​​${applicationId}​​​,这将避免​​android:authorities​​值非唯一的问题。

<provider
android:name="xxxx.xxxx.xxx.xxxProvider"
android:authorities="${applicationId}.xxxx"
android:grantUriPermissions="true"
android:exported="false"/>

  • ​${applicationId}​​​也可以用在​​Manifest​​中其他需要唯一的取值情况,这种使用方式很灵活。
举报

相关推荐

0 条评论