1. 前言
- 本文资料来源网络公开资源,并根据个人实践见解纯手打整理,如有错误请随时指出。
- 本文主要用于个人积累及分享,文中可能引用其他技术大牛文章(仅引用链接不转载),如有侵权请告知必妥善处理。
2. applicationId和packageName
2.1. IDE为Eclipse时
applicationId基于gradle编译,Eclipse IDE 不存在applicationId,也不能使用它,请忽略。
2.2. IDE为Android Studio时
2.2.1 applicationId
- 理论上来讲
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中其他需要唯一的取值情况,这种使用方式很灵活。
详解applicationId与packageName
本文深入探讨了Android应用开发中的applicationId与packageName的区别与联系,包括它们在不同IDE下的表现形式,以及如何通过配置实现同一工程发布不同版本的APK。
713

被折叠的 条评论
为什么被折叠?



